Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

1

29.08.2008, 03:57

3D - Sprites -Rotations-Problem

Hallo,

ich bastel gerade an einem kleinen Partikelsystem und mein Problem

besteht darin, dass sich meine Sprites immer mitdrehen, wenn ich um die

Kameraachse rotiere. (Um die Z-achse, sonst passiert das nicht.)

Und ich finde einfach keinen Ansatz, wie ich das beheben kann.

SetMatrix View enthält meine Kamera:
Und die schaut nach (0,0,1) .

vY -Achse von der Kamera (0,+1,0);


vYAchse vom Sprite = vYKamera

vXAchse vom Sprite = vXKamera


Also die Frage:
##########
Wie bekomme ich das hin, dass wenn ich die Kamera um die Kameraachse(z) rotiere, das sich meine Sprites nicht mit drehen?



P.s.: Da die Kamera beweglich ist, soll das Sprite stets zur Kamera ausgerichtet sein.


Besten Dank

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.08.2008, 08:51

Re: 3D - Sprites -Rotations-Problem

wie renderst du denn deine sprites (mit welcher matrix, etc.) !?

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

3

29.08.2008, 10:48

Rendern

vUp = Y-Achse der Kamera

vKameraDir = Z-Achse der Kamera, (oder auch Kameraachse)

D3DVEKTOR_vPosition; // Mittelpunkt des Sprite

vUp = D3dVektorNormalisieren(vUp); // Y-Achse des Sprite

D3DVEKTOR_vKamera = D3dVektorNormalisieren(vKameraDir);


// Keuzprodukt aus Kameraachse Z und Kameraachse Y
// wird zu Spriteachse X
D3DVEKTOR_vX=D3dVektorNormalisieren(D3dVektorKreuzprodukt(vKamera,vUp));


// 4 Vektoren werden Berechnet und anschließend zum Mittelpunkt
// addiert, was dann die 4 Vertex des Sprite bildet

D3DVEKTOR_vLefTop=D3dVektorAddieren(vUp,D3dVektorFill(-vX.x,-vX.y,-vX.z));
D3DVEKTOR_vLefBot=3dVektorAddieren(D3dVektorFill(-vUp.x,-vUp.y,-vUp.z),D3dVektorFill(-vX.x,-vX.y,-vX.z));
D3DVEKTOR_vRigTop=D3dVektorAddieren(vUp,vX);
D3DVEKTOR_vRigBot=D3dVektorAddieren(D3dVektorFill(-vUp.x,-vUp.y,-vUp.z),vX);


// vPos = vPospition +(....*fSize)

mSprite[0].vPos=D3dVektorAddieren(vPosition,D3dVektorScalieren(vLefTop,pCurrentPartikel->fSize));
mSprite[1].vPos=D3dVektorAddieren(vPosition,D3dVektorScalieren(vLefBot,pCurrentPartikel->fSize));
mSprite[2].vPos=D3dVektorAddieren(vPosition,D3dVektorScalieren(vRigTop,pCurrentPartikel->fSize));
mSprite[3].vPos=D3dVektorAddieren(vPosition,D3dVektorScalieren(vRigBot,pCurrentPartikel->fSize));


// Zeichnen
g_pD3DDevice9->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,mSprite,sizeof(S_VERTEX_SPRITE));

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

4

29.08.2008, 11:03

Matrix

//####################
// MATRIX

// vorher wird die Matrix gesetzt
//WORLD
Translation(100,100,100);

// vorher wird die Matrix gesetzt
// VIEW

D3DXMatrixLookAtLH(&mView, &eye, &at, &up )

D3DXVektor eye // Position des Betrachters (100,100,-200)

D3DXVektor at = eye + vDirZ.x // z.B.: vDirZ (0,0,1)

D3DXVektor Up = immer senkrecht zu at //z.B.: Up (0,1,0)



RENDERN
##########################################

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

5

31.08.2008, 14:11

So, bitte löscht den Thread wieder raus, ich sehe ein, dass ich einfach selbst

eine Lösung finden muss.

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

6

05.09.2008, 18:58

Na endlich Problem gefunden, man muss sich nur merken, um wie viel Grad

die Kamera um die Z-Achse gedreht wurde und anschließend die Sprites um

diesen Winkel zurückdrehen.


Danke für die Unterstützung, unglaublich hilfreich hier: Man wird sogar zur

eigenen Benutzung des Gehirns gezwungen, dass finde ich super.

Also noch mal vielen Dank.

:p :p :p :p :p :p :p :p

Werbeanzeige