Respostas:
(Essa resposta é essencialmente a mesma que a de Stefan, mas eu queria adicionar alguns detalhes sobre os vetores de linha e coluna e como determinar qual você está usando.)
Sim, isso é possível, mas os detalhes dependem de você representar seus vetores como linhas ou colunas.
Se você estiver usando vetores de coluna , normalmente os transformará, multiplicando à esquerda suas matrizes:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Obviamente, você também pode fazer isso em uma etapa:
vector = mRotateX * mRotateZ * vector;
Mas a multiplicação de matrizes é associativa, o que significa que não importa qual multiplicação é realizada primeiro:
A * B * C = (A * B) * C = A * (B * C)
Para que possamos escrever
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Foi agora criada uma única matriz, o que é equivalente a primeira rotação sobre Z
e segunda sobre X
. Isso generaliza trivialmente para qualquer número de transformações. Observe que as transformações são aplicadas da direita para a esquerda.
Se, por outro lado, você estiver usando linhas vetores, normalmente você vai direito -multiply suas matrizes:
vector = vector * mRotateZ;
vector = vector * mRotateX;
Mais uma vez, escrevendo-o em uma etapa, obtemos
vector = vector * mRotateZ * mRotateX;
que pode ser reescrito como
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Observe que, nesse caso, as transformações foram aplicadas da esquerda para a direita.
Sim, basta multiplicá-los na ordem inversa:
Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);
EDITAR. Minha resposta se aplica apenas se você estiver usando vetores de coluna. Por favor, veja a resposta detalhada de Martin Büttner.
De matemática:
Existe um homomorfismo 2: 1 dos quaterniões da unidade para SO (3) (o grupo de rotação).
O que isso (essencialmente) significa é que:
Pense sobre isso. A partir do espaço do objeto, você pode girar seu objeto em qualquer orientação usando apenas uma única rotação.
Gostaria de salientar que trazer quaternions não era apenas matemática aleatória. Em contraste com as outras respostas, a abordagem preferida nos gráficos é na verdade representar as rotações como quaternions, pois elas ocupam menos espaço e são mais rápidas de combinar.
Existem maneiras facilmente acessíveis de converter entre matrizes de rotação e quaternions, dependendo da sua preferência. O ponto é que as rotações são os quaternions em um sentido matemático; portanto, suas combinações também são rotações únicas.