Espero que sepas GL Mathematics ( GLM ) porque tengo un problema, no puedo romper:
Tengo un conjunto de ángulos de Euler y necesito realizar una interpolación suave entre ellos. La mejor manera es convertirlos a Quaternions y aplicar el alrogirthm SLERP.
El problema que tengo es cómo inicializar glm :: quaternion con Euler Angles, ¿por favor?
Leí una y otra vez la documentación de GLM , pero no encuentro la adecuada Quaternion constructor signature
, eso requeriría tres ángulos de Euler. La más cercana que encontré es la función
angleAxis () , que toma el valor del ángulo y un eje para ese ángulo. Tenga en cuenta, por favor, lo que estoy buscando de alguna manera, cómo analizar RotX, RotY, RotZ
.
Para su información, esta es la firma de la función angleAxis () mencionada anteriormente :
detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
operator *
para la multiplicación de Quaternion, por lo que posiblemente tendré que realizar la multiplicación manualmente .Donde
angle
hay un tono queglm::vec3
contiene , guiñada, rodar respectivamente.PD. En caso de duda, solo ve a los encabezados y mira. La definición se puede encontrar en glm / gtc / quaternion.hpp:
¿Para dónde
quat
es un tipo flotantetquat
?fuente
La solución está en wikipedia: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
usando eso:
Constructores para un cuaternión, dado un Euler (donde la aplicación de rotación es XYZ o ZYX). Sin embargo, son solo dos de las seis combinaciones posibles de ángulos de Euler. Realmente necesita averiguar en qué orden se construyen los ángulos de Euler al convertir a matriz de transformación. Solo entonces se puede definir la solución.
En la antigua empresa en la que trabajaba, teníamos Z como reenvío (como la mayoría de las tarjetas gráficas), por lo que el orden de la aplicación era ZYX, y en mi compañía actual el eje Y está hacia adelante y Z está arriba, por lo que nuestro orden de aplicación es YZX. Este orden es el orden en el que multiplicas tus cuaterniones para generar tu transformación final, y el orden de las rotaciones es que las multiplicaciones no son conmutativas.
fuente
¡El ángulo debe estar en radianes!
fuente