2013-07-29 5 views
14

Для целей lerping мне нужно разложить матрицу 4x4 на кватернион и vec3. Схват кватерниона прост, так как вы можете просто передать матрицу в конструктор, но я не могу найти способ захватить перевод. Неужели должен быть способ?glm - Разложить mat4 в перевод и вращение?

ответ

11

Похоже GLM 0.9.6 поддерживает матрицы разложения 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

документация немного устарел на том (даже для текущего v0.9.7), вам необходимо включить вместо , чтобы он работал. –

18

glm::vec3(m[3]) вектор позиции (при условии, m является glm::mat4)

5

В версии GLM-0.9.8.1 вы должны включать в себя:

#include <glm/gtx/matrix_decompose.hpp>

Чтобы использовать его:

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

Помните, что результирующий кватернион неправильный. Он возвращает свое сопряжение!

Чтобы исправить это добавить это в ваш код:

rotation=glm::conjugate(rotation);

+1

Thankk the bunch, действительно странный API – lama12345

Смежные вопросы