glRotate(angle,x,y,z),在这种情况下 x,y,z 是啥?

Posted

技术标签:

【中文标题】glRotate(angle,x,y,z),在这种情况下 x,y,z 是啥?【英文标题】:glRotate(angle,x,y,z), what is x,y,z in this case?glRotate(angle,x,y,z),在这种情况下 x,y,z 是什么? 【发布时间】:2013-10-03 23:26:43 【问题描述】:

我在这里阅读了文档:http://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml

它指定角度以度为单位。它说 X,Y,Z 是向量。如果我说 glRotate(2,1,0,0) 表示我将围绕 X 轴旋转 2 度。

如果我说 glRotate(2,0.5,0,0) 和 glRotate(2,0.0174524,0,0) 会发生什么

我不明白在那种情况下到底发生了什么,有人可以帮我解释一下吗?

它是否按角度的百分比旋转?

【问题讨论】:

【参考方案1】:

它仍然会绕 X 轴旋转 2 度。您链接的该页面还显示以下内容:

x y z = 1 (if not, the GL will normalize this vector).

表示向量 (x,y,z) 是一个单位向量(长度为 1),如果不是,GL 将对向量进行归一化(除以其长度,使其长度为 1)。

结论:x,y,z参数定义了一个向量,方向是唯一相关的部分,长度由函数处理。因此,您可以安全地放入任何矢量,它会简单地围绕该矢量旋转。

【讨论】:

实际上是||(x,y,z)||=1,但显然您的浏览器不支持 MathML。 x y z = 1 (if not, the GL will normalize this vector). 如果是这样,你能解释一下为什么函数在glrotatef() 中期望浮点数和glrotated() 中的双精度数吗?【参考方案2】:

这并不是说xyz 是向量。如果您使用支持 MathML 的浏览器打开页面,您会看到类似

glRotate 产生围绕向量 (x,y,z) 的角度旋转。

xyz 是单个向量的分量。同样,它没有说“x y z = 1(如果不是,GL 将规范化这个向量)”:而是说:

||(x,y,z)||=1(如果不是,GL 会对该向量进行归一化)。

所以,(x,y,z) 是向量,函数将围绕其旋转。如果你提供的向量没有被归一化,GL会对其进行归一化,所以glRotate(2,0.5,0,0)glRotate(2,0.0174524,0,0)是等价的。

【讨论】:

【参考方案3】:

glRotate 表示您可以将当前矩阵旋转给定向量 (x, y, z) angle 度数。所以参数 x、y、z 只是 3D 空间中向量(线)的 3 个基本参数。正如你所看到的,一个向量有方向和长度,但是在这个函数中,长度是没有用的,所以无论你的向量长度是1还是100还是0.2,在这个函数中都没有意义。这只是一个方向标记。

【讨论】:

以上是关于glRotate(angle,x,y,z),在这种情况下 x,y,z 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Lua实现angle角

transform

ros Python 四元数转欧拉角

GL10控制图形旋转

在 3d 空间中移动一个点

C++ 四元数旋转未按预期工作