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】:
这并不是说x
、y
和z
是向量。如果您使用支持 MathML 的浏览器打开页面,您会看到类似
glRotate 产生围绕向量 (x,y,z) 的角度旋转。
即x
、y
、z
是单个向量的分量。同样,它没有说“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 是啥?的主要内容,如果未能解决你的问题,请参考以下文章