Ho un sistema di rilevamento marker per AR al momento, rileva i marker nella scena e fornisce la matrice di trasformazione della telecamera per ciascun marker nella scena.Ottieni matrice di rotazione tra due due matrici di trasformazione (XNA)
Diciamo che ho trovato 2 marcatori. Sto cercando di trovare la matrice di rotazione che dovrò applicare a uno dei marker per farla coincidere con l'orientamento dell'altro marker.
Ho pensato che dovrebbe essere lo stesso del calcolo della matrice di trasformazione di un marcatore a un altro e la decomposizione della trasformazione per ottenere la matrice di rotazione di eulero x, y, z ma non riesco a farlo funzionare. Sto usando C# con XNA.
in codice:
Matrix marker1 = markerTransforms[0];
Matrix marker2 = markerTransforms[1];
Matrix relativeTransform = Matrix.Invert(marker1) * marker2;
Quaternion rotation;
Vector3 scale;
Vector3 translation;
relativeTransform.Decompose(out scale, out rotation, out translation);
Matrix rotationMatrix = Matrix.CreateFromQuaternion(rotation);
Ciò di cui sopra non sembra funzionare.
Un'altra domanda sarebbe come estrarre le rotazioni x, y, z euler dalla matrice di rotazione?
EDIT:
ho trovato una funzione per convertire il quaternione per euler seguente x, y, z ordine qui: http://forums.create.msdn.com/forums/p/4574/23763.aspx
Applicando questo al mio codice ho ottenuto i seguenti risultati:
La rotazione reale dovrebbe essere: x: y 0: 0 z: -0.52
ho anche notato che th e y e z sono cambiati molto a seconda di come ho posizionato la fotocamera.
I due trasformare matrici ottengo dal rivelatore marcatore contengono l'orientamento e la traduzione della camera rispetto ad uno dei marcatori come spiegato qui: http://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm averli convertiti in formato XNA e so loro di lavorare correttamente come può disegnare gli angoli sullo schermo e si abbina a ciò che vede la telecamera.
Sono quasi sicuro che gli angoli di eulero sono calcolati correttamente, ma sono dati nel sistema di coordinate relativo alla telecamera. Ma tu vuoi ottenere angoli euler rispetto al piano orizzontale, vero? – user502144