2013-07-29 15 views
14

Per scopi di lerping, ho bisogno di scomporre una matrice 4x4 in un quaternion e un vec3. Afferrare il quaternion è semplice, dato che puoi semplicemente passare la matrice nel costruttore, ma non riesco a trovare un modo per prendere la traduzione. Sicuramente ci deve essere un modo?glm - Decompone il mat4 in traslazione e rotazione?

risposta

11

Sembra glm 0.9.6 supporta matrice decomposizione 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

La documentazione è un po 'obsolete su quello (anche per v0.9.7 corrente), è necessario includere invece di perché funzioni. –

18

glm::vec3(m[3]) è il vettore posizione (supponendo m è glm::mat4)

5

Alla versione glm-0.9.8.1 è necessario includere:

#include <glm/gtx/matrix_decompose.hpp>

Per utilizzare IT:

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

Tenete a mente che il quaternione con conseguente non corretta. Restituisce il suo coniugato!

Per correggere questo aggiungere questo al codice:

rotation=glm::conjugate(rotation);

+1

Grazie infinite API davvero strane – lama12345