Estoy tratando de escribir código con rota un objeto.
Lo implementé como:
La rotación sobre el eje X viene dada por la cantidad de cambio en las coordenadas y de un mouse y la rotación sobre el eje Y está dada por la cantidad de cambio en las coordenadas x de un mouse.
Este método es simple y funciona bien hasta que en el eje coincida con el eje Z, en resumen, se produce un bloqueo de gimble.
¿Cómo puedo utilizar la rotación alrededor del eje Z para evitar el bloqueo del cardán?
Respuestas:
La solución simple es no almacenar la orientación del objeto como ángulos alrededor de los ejes (eje X, Y, Z), como por ejemplo en los ángulos de Euler.
Almacene la orientación del objeto como una matriz o un cuaternión.
Esto puede causar bloqueo de cardán, utilizando ángulos de euler:
Sin bloqueo de cardán:
Sin bloqueo de cardán tampoco:
Ahora, cada vez que se cambia el mouse, multiplique m_orientation con el cambio de orientación proveniente del movimiento del mouse en cada fotograma.
fuente
¡Este libro (representación en tiempo real) me ayudó mucho! Consulte las páginas 66 y 70. Tiene muy buenos gráficos y explicaciones. ¡Los cuaterniones también están en la página 72! :)
Rotación sobre un eje arbitrario
Esto representa la cámara con la rotación realizada por la entrada del mouse:
Con la entrada del mouse puede modificar el guiñada (cabeza), cabeceo y balanceo.
fuente