glm四元数旋转合并

时间:2016-04-19 14:07:00

标签: opengl glm-math assimp

我目前正在试图弄清楚四元数是如何在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给出了我正在寻找的确切解决方案,因此要么应该工作。

1 个答案:

答案 0 :(得分:1)

经过3天的反复试验后,我终于弄明白了发生了什么。事实证明我的一些骨头在搅拌机中有一个“滚动”,这使得事情搞砸了。颠倒的骨头在我的网格中也是一个问题。对于那些遇到assimp加载动画问题的人来说:

  • 首先检查你的绑定姿势
  • 确保没有颠倒的骨头,这可能会导致一些问题。
  • 检查所有骨骼信息(在我的情况下,它是“滚动”导致问题)

我的四元数代码没有问题......