glm-разложить mat4 на перевод и вращение?

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

3 ответов


похоже, что 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);

glm::vec3(m[3]) - вектор положения (при условии m is glm::mat4)


в версии 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);