5 Stimmen

Wie kann man ein Objekt in XYZ-Achsen in DirectX drehen?

Ich habe diesen Code ausprobiert:

D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

Aber anscheinend rotiert es immer nur die letzte Drehung (Z-Achse).

Wie kann ich ein Objekt gleichzeitig um alle XYZ-Achsen drehen? Ich versuche das DirectX-Äquivalent für die OpenGL-Rotation zu finden:

glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);


EDIT: Sieht so aus, als hätte ich es selbst herausgefunden:

D3DXMATRIX matRotateX;
D3DXMATRIX matRotateY;
D3DXMATRIX matRotateZ;
D3DXMatrixRotationX(&matRotateX, rx);
D3DXMatrixRotationY(&matRotateY, ry);
D3DXMatrixRotationZ(&matRotateZ, rz);
D3DXMATRIX matRotate = matRotateX*matRotateY*matRotateZ;
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

Wenn nicht, bitte kommentieren. Ich kann es erst nach Ablauf von 8 Stunden als Antwort posten! (benötige +7 Reputation, um das zu tun).

4voto

Cpt. Red Punkte 102

D3DXMatrixRotationX dreht keine Matrix, sondern erstellt eine Matrix, die verwendet werden kann, um etwas zu drehen.

Sie könnten also die Matrix direkt nach jedem Schritt verwenden und etwas anderes drehen oder Sie könnten D3DXMatrixRotationYawPitchRoll verwenden, sodass Sie diese nur einmal erstellen müssen...

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);

BEARBEITEN: Ihre Bearbeitung funktioniert auch...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X