Respuestas:
(Esta respuesta es esencialmente la misma que la de Stefan, pero quería agregar algunos detalles sobre los vectores de fila y columna, y cómo determinar cuál está usando).
Sí, esto es posible, pero los detalles dependen de si representas tus vectores como filas o columnas.
Si está utilizando vectores de columna , normalmente los transformará multiplicando a la izquierda sus matrices:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Por supuesto, también puedes hacer esto en un solo paso:
vector = mRotateX * mRotateZ * vector;
Pero la multiplicación matricial es asociativa, lo que significa que no importa qué multiplicación se realice primero:
A * B * C = (A * B) * C = A * (B * C)
Para que podamos escribir
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Ahora hemos creado una matriz individual, que es equivalente a primero gira alrededor Z
y segundo sobre X
. Esto se generaliza trivialmente para cualquier cantidad de transformaciones. Tenga en cuenta que las transformaciones se aplican de derecha a izquierda.
Si, por otro lado, está utilizando vectores de fila , normalmente multiplicará a la derecha sus matrices:
vector = vector * mRotateZ;
vector = vector * mRotateX;
De nuevo, escribiéndolo en un paso, obtenemos
vector = vector * mRotateZ * mRotateX;
que puede reescribirse como
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Tenga en cuenta que en este caso, las transformaciones se aplican de izquierda a derecha.
Sí, simplemente multiplíquelos en orden inverso:
Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);
EDITAR. Mi respuesta solo se aplica si está utilizando vectores de columna. Consulte la respuesta detallada de Martin Büttner.
De las matemáticas:
Hay un homomorfismo 2: 1 desde la unidad de cuaterniones hasta SO (3) (el grupo de rotación).
Lo que esto (esencialmente) significa es que:
Piénsalo. Comenzando desde el espacio objeto, puede girar el objeto en cualquier orientación utilizando sólo una sola rotación.
Me gustaría señalar que traer cuaterniones no fue solo matemática aleatoria. A diferencia de las otras respuestas, el enfoque preferido en los gráficos es representar las rotaciones como cuaterniones, ya que ocupan menos espacio y son más rápidas de combinar.
Existen formas fáciles de convertir en Google para convertir matrices de rotación y cuaterniones, según lo que prefiera. El punto es que las rotaciones son los cuaterniones en un sentido matemático, por lo que sus combinaciones también son rotaciones simples.