2012-01-09 11 views
5

Ho provato questo codice:Come ruotare un oggetto negli assi XYZ su DirectX?

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

ma sembra sempre ruotare solo l'ultima rotazione (asse Z).

Come ruoto un oggetto con tutti gli assi XYZ allo stesso tempo? Im cercando di trovare DirectX equivalente per la rotazione OpenGL:

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


EDIT: Sembra ho capito da solo:

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); 

In caso contrario, si prega di commentare . Non posso postarlo come risposta fino a 8 ore! (serve +7 reputazione per farlo).

+0

Non so su DirectX, ma potresti avere la moltiplicazione nell'ordine sbagliato. Se sai che il tuo ordine è corretto, ignora questo commento, altrimenti controlla. –

risposta

4

D3DXMatrixRotationX non ruota una matrice ma crea una matrice che può essere utilizzata per ruotare qualcosa.

Quindi è possibile utilizzare la matrice subito dopo ogni passo e ruotare qualcos'altro o si potrebbe usare D3DXMatrixRotationYawPitchRoll in modo che avete solo bisogno di creare una volta ...

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

EDIT: La modifica lavora troppo ...

+0

bella ricerca, per favore modifica i tuoi parametri nell'ordine corretto: ry, rx, rz – Rookie

+0

@Rookie grazie, e questo è quello che succede quando ti dimentichi di ricontrollare ... Risolto ora ... –

Problemi correlati