【发布时间】:2019-10-10 12:24:12
【问题描述】:
从 OpenGL 中的四元数测试中,我注意到多轴上的旋转无法正常工作。所以我写了一个简单的程序来调试它。这是我的程序:
glm::quat rotation = glm::angleAxis(glm::radians(45.0f), glm::vec3(1.0f, 1.0f, 0.0f));
glm::vec3 eulerRotation = glm::degrees(glm::eulerAngles(rotation));
printf("X = %f\tY = %f\tZ = %f\n", eulerRotation.x, eulerRotation.y, eulerRotation.z);
根据我对旋转的理解,这应该输出:
X = 45.0 Y = 45.0 Z = 0.0
但是程序会输出这个:
X = 51.589348 Y = 45.000004 Z = 18.939444
我正在使用 GLM 版本 0.9.9.5 和 C++ 14 那么,我对旋转的理解是错误的还是 GLM 搞砸了?
【问题讨论】:
-
我没有验证您找到的角度是否正确,但请注意 Axis-Angle Representation 与 Euler Angles 不同,正确的结果看起来更像 glm 的输出而不是您的期待。
-
@Gilles-PhilippePaillé 您的文章说:“轴-角度表示相当于更简洁的旋转矢量,也称为欧拉矢量”
-
这些名字让人很困惑,但欧拉向量与包含欧拉角的向量不同。
-
@Gilles-PhilippePaillé 感谢您的解释,请您将其写为答案,以便我结束问题。
标签: c++ opengl quaternions glm-math