2013-07-29 18 views
14

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?

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); 
+1

Die Dokumentation ist ein bisschen veraltet, dass man auf (auch für bestehende v0.9.7), müssen Sie anstelle von , damit es funktioniert. –

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