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