Ich hoffe du kennst GL Mathematik ( GLM ), weil ich ein Problem habe, ich kann nicht brechen:
Ich habe eine Reihe von Euler-Winkeln und muss zwischen ihnen glatt interpolieren . Am besten konvertieren Sie sie in Quaternions und wenden SLERP alrogirthm an.
Das Problem, das ich habe, ist, wie man glm :: quaternion mit Euler Angles initialisiert , bitte.
Ich habe die GLM-Dokumentation immer wieder gelesen , kann aber nicht feststellen Quaternion constructor signature
, dass ich drei Euler-Winkel benötige. Das nächste, was ich gefunden habe, ist die
Funktion angleAxis () , die den Winkelwert und eine Achse für diesen Winkel verwendet. Beachten Sie bitte, wonach ich suche und wie ich analysieren kann RotX, RotY, RotZ
.
Zu Ihrer Information ist dies die oben angegebene Funktionssignatur von angleAxis () :
detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
operator *
Quaternion-Multiplikation nicht überlastet. Daher muss ich die Multiplikation möglicherweise manuell durchführen .Wo
angle
ist einglm::vec3
enthaltender Pitch, Yaw, Roll .PS. Im Zweifelsfall einfach in die Überschriften gehen und nachsehen. Die Definition finden Sie in glm / gtc / quaternion.hpp:
Wo
quat
ist ein float typedef fürtquat
.quelle
Die Lösung befindet sich in Wikipedia: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
damit:
Konstruktoren für eine Quaternion unter Angabe eines Eulers (wobei die Anwendung der Rotation XYZ oder ZYX ist). Es sind jedoch nur zwei von sechs möglichen Kombinationen von Euler-Winkeln. Sie müssen wirklich herausfinden, in welcher Reihenfolge die Euler-Winkel konstruiert sind, wenn Sie in eine Transformationsmatrix konvertieren. Erst dann kann die Lösung definiert werden.
In der alten Firma, in der ich gearbeitet habe, hatten wir Z als Vorwärts (wie die meisten Grafikkarten), daher lautete die Anwendungsreihenfolge ZYX, und in meiner aktuellen Firma ist die Y-Achse vorwärts und Z nach oben, also lautet unsere Anwendungsreihenfolge YZX. Diese Reihenfolge ist die Reihenfolge, in der Sie Ihre Quaternionen multiplizieren, um Ihre endgültige Transformation zu generieren, und die Reihenfolge ist wichtig für Rotationen, da die Multiplikationen nicht kommutativ sind.
quelle
Der Winkel muss im Bogenmaß angegeben werden!
quelle