(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.
Vectores de columna
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.
Vectores de fila
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.