28

lerping のために、4x4 行列をクォータニオンと vec3 に分解する必要があります。行列をコンストラクターに渡すだけなので、クォータニオンを取得するのは簡単ですが、変換を取得する方法が見つかりません。きっと道があるはずですよね?

4

6 に答える 6

35

glm::vec3(m[3])は位置ベクトルmです( を仮定glm::mat4)

于 2013-10-18T11:18:42.273 に答える
32

glm 0.9.6 は行列分解をサポートしているようです http://glm.g-truc.net/0.9.6/api/a00204.html

#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);
于 2015-04-01T13:28:15.740 に答える
21

バージョン 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);

于 2016-10-13T15:08:35.030 に答える