2013-07-29 88 views
14

Vì mục đích lerping tôi cần phải phân hủy một ma trận 4x4 thành một quaternion và một vec3. Lấy quaternion là đơn giản, vì bạn chỉ có thể vượt qua ma trận vào constructor, nhưng tôi không thể tìm thấy một cách để lấy bản dịch. Chắc chắn phải có một cách?glm - Phân hủy mat4 thành bản dịch và xoay vòng?

Trả lời

11

Dường như GLM 0.9.6 hỗ trợ ma trận phân hủy 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

Các tài liệu là một chút lỗi thời vào đó một (ngay cả đối với v0.9.7 hiện tại), bạn cần phải bao gồm thay vì để nó hoạt động. –

18

glm::vec3(m[3]) là vector vị trí (giả sử m được glm::mat4)

5

Tại phiên bản GLM-0.9.8.1 bạn phải bao gồm:

#include <glm/gtx/matrix_decompose.hpp>

Để sử dụng nó:

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

Hãy nhớ rằng kết quả của quaternion không chính xác. Nó trả về liên hợp của nó!

Để sửa lỗi này thêm video này vào mã của bạn:

rotation=glm::conjugate(rotation);

+1

Thannk một nhóm, API thực sự kỳ lạ – lama12345