Tengo un sistema de detección de marcador para AR en este momento, detecta marcadores en la escena y da la matriz de transformación de la cámara para cada marcador en la escena.Obtener matriz de rotación entre dos matrices de transformación (XNA)
Digamos que he encontrado 2 marcadores. Estoy tratando de encontrar la matriz de rotación que tendré que aplicar a uno de los marcadores para que coincida con la orientación del otro marcador.
Pensé que debería ser lo mismo que calcular la matriz de transformación de un marcador a otro y descomponer la transformación para obtener la matriz de rotación x, y, z euler, pero parece que no puedo hacer que funcione. Estoy usando C# con XNA.
En código:
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);
Esto anterior no parece funcionar.
Otra pregunta sería cómo extraer las rotaciones x, y, z euler de la matriz de rotación?
EDIT:
encontré una función para convertir el cuaternión de Euler siguiente x, y, orden z aquí: http://forums.create.msdn.com/forums/p/4574/23763.aspx
Aplicando esto a mi código que me dieron los siguientes resultados:
La rotación real debe ser: x: 0 y: 0 z: -0,52
I también notó que ésimo e y y z cambiaron mucho dependiendo de cómo coloqué la cámara.
Los dos transformar las matrices que obtener del detector de marcador contienen la orientación y la traducción de la cámara con respecto a uno de los marcadores como se explica aquí: http://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm los he convertido al formato de XNA y sé que funcionen correctamente como yo puede dibujar las esquinas en la pantalla y coincide con lo que la cámara está viendo.
Estoy casi seguro de que los ángulos de euler se calculan correctamente, pero se dan en el sistema de coordenadas relacionado con la cámara. Pero quieres obtener ángulos de Euler relativos al plano horizontal, ¿no? – user502144