J'espère que vous connaissez GL Mathematics ( GLM ) parce que j'ai un problème, je ne peux pas casser:
J'ai un ensemble d' angles d'Euler et je dois effectuer une interpolation fluide entre eux. La meilleure façon est de les convertir en quaternions et d'appliquer l' alrogirthm SLERP.
Le problème que j'ai est de savoir comment initialiser glm :: quaternion avec Euler Angles, s'il vous plaît?
J'ai lu la documentation GLM encore et encore, mais je ne trouve pas approprié Quaternion constructor signature
, cela prendrait trois angles d'Euler. Le plus proche que j'ai trouvé est la fonction
angleAxis () , prenant la valeur de l'angle et un axe pour cet angle. Notez, s'il vous plaît, ce que je cherche si un moyen, comment analyser RotX, RotY, RotZ
.
Pour votre information, voici la signature de fonction angleAxis () mentionnée ci-dessus :
detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
operator *
pour la multiplication Quaternion, donc je devrai peut-être effectuer la multiplication manuellement .Où
angle
est unglm::vec3
contenant de tangage, lacet, roulis , respectivement.PS. En cas de doute, allez dans les en-têtes et regardez. La définition peut être trouvée dans glm / gtc / quaternion.hpp:
Où se
quat
trouve une typographie flottantetquat
.la source
La solution est dans wikipedia: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
en utilisant cela:
Constructeurs pour un quaternion, étant donné un Euler (où l'application de la rotation est XYZ ou ZYX). Cependant, ce n'est que deux des six combinaisons possibles d'angles d'Euler. Vous avez vraiment besoin de savoir dans quel ordre les angles d'Euler sont construits lors de la conversion en matrice de transformation. Ce n'est qu'alors que la solution peut être définie.
Dans l'ancienne entreprise dans laquelle je travaillais, nous avions Z comme attaquants (comme la plupart des cartes graphiques), donc l'ordre d'application était ZYX, et dans mon entreprise actuelle, l'axe Y est en avant et Z est en hausse, donc notre ordre d'application est YZX. Cet ordre est l'ordre dans lequel vous multipliez vos quaternions ensemble pour générer votre transformation finale, et l'ordre des rotations est que les multiplications ne sont pas commutatives.
la source
fAngle doit être en radians!
la source