Zum Zwecke des Lernens muss ich eine 4x4-Matrix in eine Quaternion und eine Vec3 zerlegen. Das Ergreifen der Quaternion ist einfach, da Sie die Matrix einfach in den Konstruktor übergeben können, aber ich finde keine Möglichkeit, die Übersetzung zu übernehmen. Sicher muss es einen Weg geben?glm - mat4 in Translation und Rotation zerlegen?
14
A
Antwort
11
Es ist wie GLM sieht 0.9.6 unterstützt Matrix Zersetzung http://glm.g-truc.net/0.9.6/api/a00204.html
glm::mat4 transformation; // your transformation matrix.
glm::vec3 scale;
glm::quat rotation;
glm::vec3 translation;
glm::vec3 skew;
glm::vec4 perspective;
glm::decompose(transformation, scale, rotation, translation, skew, perspective);
18
glm::vec3(m[3])
ist der Positionsvektor (unter der Annahme m
wird glm::mat4
)
5
Bei Version GLM-0.9.8.1 Sie enthalten müssen:
#include <glm/gtx/matrix_decompose.hpp>
nutzen zu können, es:
glm::mat4 transformation; // your transformation matrix.
glm::vec3 scale;
glm::quat rotation;
glm::vec3 translation;
glm::vec3 skew;
glm::vec4 perspective;
glm::decompose(transformation, scale, rotation, translation, skew,perspective);
Beachten Sie, dass die resultierende Quaternion nicht korrekt ist. Es gibt sein Konjugat zurück!
dies dies, um Ihren Code zu beheben hinzuzufügen:
rotation=glm::conjugate(rotation);
+1
Thannk ein Haufen, wirklich seltsame API – lama12345
Die Dokumentation ist ein bisschen veraltet, dass man auf (auch für bestehende v0.9.7), müssen Sie anstelle von , damit es funktioniert. –