DirectX - Direct3D - Rotation (RotateXmatrix, RotateZmatrix)

cedricdierckx
Messages postés
5
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
23 juin 2006
- 1 août 2004 à 10:15
ShadowMaster
Messages postés
184
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
18 août 2005
- 9 août 2004 à 15:18
Salut
donc j'ai commencé à faire un petit jeu d'avions, mais j'ai un problème en tournant l'avion: il doit savoir tourner sur son axe X et Z. Donc j' ai écris:
DX.RotateXMatrix matSquareX, PlayerRotationX * Rad
DX.RotateZMatrix matSquareZ, PlayerRotationZ * Rad
DX.MatrixMultiply matSquare, matSquareX, matSquareZ
(matsquare est la matrice pour tourner l'avion)

le problème est qu'il tourne d'abord l'avion autour de l'axe X et puis au lieu de tourner l'avion autour de SON axe Z, il le tourne autour de l'axe Z, après l'avoir déjà tourné autour du X...
Je serais HYPER content si quelqu'un pourrait me répondre, bien que j'ai déjà cherché comment faire un peu partout et je n'ai pas trouvé.

Grand merci à celui qui va répondre!

Céd

1 réponse

ShadowMaster
Messages postés
184
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
18 août 2005

9 août 2004 à 15:18
pris du sdk Dx8:

Public Function AddRotation(combinetype As CombineTypeEnum, X As Single, Y As Single, z As Single, rot As Single)

Dim mat As D3DMATRIX
D3DXMatrixRotationAxis mat, vec3(X, Y, z), rot

Select Case combinetype
Case COMBINE_BEFORE
D3DXMatrixMultiply m_Matrix, mat, m_Matrix
Case COMBINE_AFTER
D3DXMatrixMultiply m_Matrix, m_Matrix, mat
Case COMBINE_replace
m_Matrix = mat
End Select

End Function

apres pour l'utiliser:
objet.AddRotation COMBINE_BEFORE, 1, 0, 0, RotX
objet.AddRotation COMBINE_BEFORE, 0, 1, 0, RotY
objet.AddRotation COMBINE_BEFORE, 0, 0, 1, RotZ

où RotX,RotY,RotZ sont les rotations
0