Risposte:
(Questa risposta è essenzialmente la stessa di Stefan, ma volevo aggiungere alcuni dettagli sui vettori di riga e colonna e su come determinare quale si sta utilizzando.)
Sì, questo è possibile, ma i dettagli dipendono dal fatto che tu rappresenti i tuoi vettori come righe o colonne.
Se stai usando i vettori di colonna , normalmente li trasformerai moltiplicando a sinistra le tue matrici:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Naturalmente, puoi anche farlo in un solo passaggio:
vector = mRotateX * mRotateZ * vector;
Ma la moltiplicazione matriciale è associativa, il che significa che non importa quale moltiplicazione venga eseguita per prima:
A * B * C = (A * B) * C = A * (B * C)
Quindi possiamo scrivere
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Ora abbiamo creato una singola matrice, che equivale a ruotare primaZ
e seconda circa X
. Questo generalizza banalmente per qualsiasi numero di trasformazioni. Si noti che le trasformazioni vengono applicate da destra a sinistra.
Se, d'altra parte, stai usando i vettori di riga , di solito moltiplicherai a destra le tue matrici:
vector = vector * mRotateZ;
vector = vector * mRotateX;
Ancora una volta, scrivendolo in un solo passaggio, otteniamo
vector = vector * mRotateZ * mRotateX;
che può essere riscritto come
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Si noti che in questo caso, le trasformazioni applicate da sinistra a destra.
Sì, basta moltiplicarli in ordine inverso:
Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);
MODIFICARE. La mia risposta si applica solo se si utilizzano vettori di colonna. Si prega di consultare la risposta dettagliata Martin Büttner.
Dalla matematica:
Esiste un omomorfismo 2: 1 dall'unità quaternioni a SO (3) (il gruppo di rotazione).
Ciò significa (essenzialmente) che:
Pensaci. A partire dallo spazio oggetti, è possibile ruotare l'oggetto in qualsiasi orientamento utilizzando una sola rotazione.
Vorrei sottolineare che il coinvolgimento dei quaternioni non era solo una matematica casuale. Contrariamente alle altre risposte, l' approccio preferito nella grafica è in realtà quello di rappresentare le rotazioni come quaternioni, poiché occupano meno spazio e sono più veloci da combinare.
Ci sono modi facilmente googleable per convertire tra matrici di rotazione e quaternioni, a seconda di quale preferisci. Il punto è che le rotazioni sono i quaternioni in senso matematico, quindi le loro combinazioni sono anche singole rotazioni.