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).
Non so su DirectX, ma potresti avere la moltiplicazione nell'ordine sbagliato. Se sai che il tuo ordine è corretto, ignora questo commento, altrimenti controlla. –