opengl - glm四元数旋转合并

标签 opengl glm-math assimp

我目前正在尝试弄清楚四元数如何在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/

相关文章:

c++ - 翻译 Assimp 3D 模型也旋转

c++ - 在内存网格上应用 Assimp 后处理

c++ - math_3d.h 与 opengl

opengl - 有没有办法阻止 OpenGL 分析器附加到我的应用程序?

c++ - 在 GLUT,c++ 中按下按键清除屏幕

c++ - GLM Math lib 使用 GCC 编译错误

c++ - 如何从 glm::mat4 中读取值

c++ - 由 glUniformMatrix4fv 创建时,统一 mat4 具有未知值

opengl - 是否可以在不先将整个纹理加载到常规 RAM 的情况下将纹理加载到 OpenGL 中?

java - 无法为 Windows x86 构建 JAssimp.dll