首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GLM angleAxis错了吗?

GLM angleAxis错了吗?
EN

Stack Overflow用户
提问于 2019-10-10 12:24:12
回答 2查看 4.2K关注 0票数 4

从OpenGL中的四元数测试中,我注意到在多轴上旋转并不是它们应该做的事情。所以我编写了一个简单的程序来调试它。这是我的节目:

代码语言:javascript
运行
复制
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);

根据我对轮调的理解,这将产生以下结果:

代码语言:javascript
运行
复制
X = 45.0  Y = 45.0  Z = 0.0

但是程序输出如下:

代码语言:javascript
运行
复制
X = 51.589348   Y = 45.000004   Z = 18.939444

我正在使用GLM版本0.9.9.5和C++ 14,那么,我对旋转的理解是错误的还是GLM搞砸了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-10 13:24:07

轴角表示欧拉角是两种不同的旋转编码方式。对于标准轴(X,Y,Z)上的旋转,表示形式是非常相似的,这会导致错误的推论,即转换是微不足道的。例如,轴角(45,(1,0,0))就是欧拉角(45,0,0).然而,对于更一般的轴,转换并不总是那么明显。

更令人困惑的是,当我们用向量的长度来编码旋转角度时,在轴角表示之外创建一个三维矢量时,使用了Euler向量的名称。例如,(45,(1,0,0))可以编码为45*(1,0,0)。然而,由于轴角表示不同于欧拉角表示,欧拉矢量与包含欧拉角的矢量并不相同。

最后,正如Amadeus在另一个答复中所述,glm框架要求将输入轴向量归一化。将此向量规范化将给出预期的结果。

票数 3
EN

Stack Overflow用户

发布于 2019-10-10 12:47:56

来自四元数

角度轴: 从一个角度和一个归一化轴构建一个四元数。 参数

  • 角表示为弧度,如果GLM_FORCE_RADIANS是定义或度不同。
  • 轴的四元数,必须归一化。(重点是我的)

在代码段中没有归一化的轴。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58322832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档