2013-07-29 16 views
14

Do celów lerowania muszę rozłożyć matrycę 4x4 na kwaternion i vec3. Złapanie kwaternionu jest proste, ponieważ możesz po prostu przekazać macierz do konstruktora, ale nie mogę znaleźć sposobu na pobranie tłumaczenia. Z pewnością musi być jakiś sposób?glm - Rozłożyć matę 4 na tłumaczenie i obrót?

Odpowiedz

11

Wygląda GLM 0.9.6 obsługuje rozkład macierzy 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

Dokumentacja jest nieco przestarzały na jednym (nawet dla bieżącego v0.9.7), trzeba podać zamiast , aby działał. –

18

glm::vec3(m[3]) jest wektorem pozycji (zakładając m jest glm::mat4)

5

W wersji GLM-0.9.8.1 trzeba obejmują:

#include <glm/gtx/matrix_decompose.hpp>

Aby korzystać to:

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

Należy pamiętać, że wynikowe kwaternionowanie jest nieprawidłowe. Zwraca koniugat!

Aby rozwiązać ten dodatek to kodzie:

rotation=glm::conjugate(rotation);

+1

Thannk kilka, naprawdę dziwne API – lama12345