Quaternions son sin duda una opción apropiada para representar rotaciones de objeto internamente. Son simples y eficientes para interpolar y representar una sola orientación sin ambigüedades.Euler angles vs. Quaternions: ¿problemas causados por la tensión entre el almacenamiento interno y la presentación al usuario?
Sin embargo, la presentación de los cuaterniones en la interfaz de usuario generalmente no es adecuada: los ángulos de Euler son mucho más familiares para los usuarios, y sus valores son un poco más intuitivos y predecibles.
Los ángulos de Euler son complicados a nivel de código: requieren que se almacene un orden de rotación, y componer una orientación práctica (ya sea matriz o cuaternión) utilizando este orden y los ángulos asociados es engorroso, por decir lo menos .
Las interpolaciones confiables se realizan de la manera más conveniente usando la representación de cuaternión. ¿Significa esto que debemos convertir constantemente entre una representación de Euler y una representación de cuaternión? ¿Es esto factible en términos de rendimiento?
¿Podemos almacenar las orientaciones como cuaterniones y convertirlas solo para que se muestren al usuario? Esto puede no ser posible porque para cualquier orientación dada hay exactamente una representación de cuaternión pero muchas representaciones de Euler. ¿Cómo 'elegimos' la representación de Euler que corresponde a la que originalmente definió esa orientación? Parece una tarea imposible: efectivamente hemos perdido información al convertirnos en un cuaternión.
¿Podríamos almacenar como ángulos de Euler y luego convertir a cuaterniones según sea necesario? Esto probablemente no es escalable: la conversión de un ángulo de Euler a un cuaternión, la interpolación y la conversión de nuevo probablemente sea un código relativamente caro.
¿Podríamos simplemente almacenar ambas representaciones y usar las más apropiadas para cualquier situación dada? Un gran costo en términos de memoria (imagina las curvas de animación para un esqueleto con alrededor de sesenta huesos) y mantener estos valores sincronizados podría ser costoso, o al menos engorroso.
¿Alguien ha visto, usado o aunque haya alguna solución inteligente para este problema? Sin duda, las tres opciones anteriores no son solo las únicas? ¿Hay algún otro problema relacionado con este dominio que tenga resuelto?
+1 gana por ser un profesional –
Aceptando esta respuesta porque parece tener la mayoría de los votos. Sin embargo, 1) Sí, desafortunadamente estoy trabajando en el dominio de animación y los artistas esperan tener ángulos de Euler 2) Sí, y de nuevo los animadores esperan poder establecer el orden de rotación en sus huesos arbitrariamente, así que tengo que admitir todas las permutaciones 3) Eso es más o menos lo que estoy haciendo al final. –