我目前正在尝试弄清楚四元数如何在opengl的glm中相乘和相互连接,但我发现的每个线程只提到1个四元数旋转....基本上,我如何组合四元数,以便所有旋转连接起来?例如:
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 为我提供了我正在寻找的确切解决方案,因此两者都应该有效。
最佳答案
经过三天的反复试验,我终于弄清楚发生了什么事。事实证明,我的一些骨头在 blender 中“滚动”,这把事情搞砸了。颠倒的骨骼也是我的网格中的一个问题。因此,对于任何在 assimp 加载动画方面遇到问题的人:
- 首先检查您的绑定(bind)姿势
- 确保您的骨骼没有倒置,这可能会导致一些问题。
- 检查所有骨骼信息(在我的例子中是“滚动”导致问题)
所以我的四元数代码没有任何问题......
关于opengl - glm四元数旋转合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36720821/