我目前正在试图弄清楚四元数是如何在glm中为opengl相互累加和连接的,但是我找到的每个线程只提到了一个四元数旋转......基本上,我如何组合四元数以使所有的旋转连接起来?例如:
glm::quat quaternions[4]; // how to merge all 4 quaternions?
到目前为止,我尝试了两种方法:
// approach 1:
glm::quat quaternions[4];
glm::quat q = glm::quat(glm::vec3(0));
q *= quaternions[0];
q *= quaternions[1];
q *= quaternions[2];
q *= quaternions[2];
glm::mat4 matrix = glm::toMat4(q);
// approach 2:
glm::quat quaternions[4];
glm::mat4 matrix = glm::mat4(1.0f);
matrix = matrix * glm::toMat4(quaternions[0]);
matrix = matrix * glm::toMat4(quaternions[1]);
matrix = matrix * glm::toMat4(quaternions[2]);
matrix = matrix * glm::toMat4(quaternions[2]);
这些方法似乎都没有给我我期待的结果。
编辑:我应该补充一点,我试图使用assimp和glm对collada模型进行换肤。方法1和方法2给出了我正在寻找的确切解决方案,因此要么应该工作。
答案 0 :(得分:1)
经过3天的反复试验后,我终于弄明白了发生了什么。事实证明我的一些骨头在搅拌机中有一个“滚动”,这使得事情搞砸了。颠倒的骨头在我的网格中也是一个问题。对于那些遇到assimp加载动画问题的人来说:
我的四元数代码没有问题......