Réponses:
(Cette réponse est essentiellement la même que celle de Stefan, mais je voulais ajouter quelques détails sur les vecteurs de ligne et de colonne, et comment déterminer ceux que vous utilisez.)
Oui, c'est possible, mais les détails varient selon que vous représentez vos vecteurs sous forme de lignes ou de colonnes.
Si vous utilisez des vecteurs de colonnes , vous les transformerez normalement en multipliant à gauche vos matrices:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Bien sûr, vous pouvez également le faire en une seule étape:
vector = mRotateX * mRotateZ * vector;
Mais la multiplication matricielle est associative, ce qui signifie que la multiplication effectuée en premier n'a pas d'importance:
A * B * C = (A * B) * C = A * (B * C)
Nous pouvons donc écrire
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Nous avons maintenant créé une matrice unique, ce qui équivaut à la première rotation autour Z
et la seconde environ X
. Cela se généralise trivialement pour un certain nombre de transformations. Notez que les transformations sont appliquées de droite à gauche.
Si, d'autre part, vous utilisez des vecteurs de ligne , vous multipliez normalement à droite vos matrices:
vector = vector * mRotateZ;
vector = vector * mRotateX;
Encore une fois, en l'écrivant en une seule étape, nous obtenons
vector = vector * mRotateZ * mRotateX;
qui peut être réécrit comme
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Notez que dans ce cas, les transformations s'appliquent de gauche à droite.
Oui, multipliez-les simplement dans l'ordre inverse:
Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);
ÉDITER. Ma réponse ne s'applique que si vous utilisez des vecteurs de colonne. Veuillez consulter la réponse détaillée de Martin Büttner.
Des mathématiques:
Il y a un homomorphisme 2: 1 des quaternions unitaires vers SO (3) (le groupe de rotation).
Cela signifie (essentiellement) que:
Pensez-y. À partir de l'espace objet, vous pouvez faire pivoter votre objet dans n'importe quelle orientation en utilisant une seule rotation.
Je tiens à souligner que l'introduction de quaternions n'était pas seulement un calcul aléatoire. Contrairement aux autres réponses, l' approche privilégiée dans les graphiques est en fait de représenter les rotations comme des quaternions, car elles prennent moins de place et sont plus rapides à combiner.
Il existe des moyens facilement googliables pour convertir entre les matrices de rotation et les quaternions, selon ce que vous préférez. Le fait est que les rotations sont les quaternions dans un sens mathématique, donc leurs combinaisons sont également des rotations uniques.