我想知道glRotate
是否旋转相机,世界轴或物体。解释它们与示例的不同之处。
答案 0 :(得分:9)
相机
OpenGL中没有摄像头。
世界轴
OpenGL中没有世界。
或对象。
OpenGL中没有对象。
<强>困惑吗
OpenGL是一个绘图系统,使用点,线和三角形进行操作。 OpenGL中没有场景或世界的概念。所有的顶点都有一组属性,OpenGL的状态决定顶点如何变成像素。
此过程的第一个阶段是获取视口中的顶点位置。在固定功能流水线(即没有着色器)中,为了获得这些,每个顶点位置如果首先乘以所谓的“模型视图”矩阵,则中间结果用于照明计算,然后乘以“投影”矩阵。在剪切之后,然后应用归一化到视口坐标。
我提到的那两个矩阵有两个目的。第一个“模型视图”用于对输入顶点应用一些变换,以使它们最终位于相对于原点的所需位置。第一个移动几何体与世界某个地方没有区别,然后在世界范围内移动视点。或者将观点保持在原点并使整个世界相反。所有这些都可以通过模型视图矩阵来描述。
第二个“投影”与标准化过程一起工作,就像一种“镜头”,可以这么说。通过这种方式,您可以设置视野(以及一些其他参数,例如移位,您需要为某些应用程序使用它们 - 不用担心它。)
关于矩阵的有趣之处在于,它们是非交换的,即对于两个给定矩阵N,M
M * N =/= N * M ; for most M, N
这最终意味着,您可以通过将原始变换以正确的顺序相互叠加,将一系列变换A,B,C,D ...组合成单个复合变换矩阵T.
OpenGL矩阵操作函数(它们已经过时BTW)就是这样做的。你有一个矩阵选择进行操作(矩阵模式),例如modelview M.然后glRotate有效地做到了这一点:
M *= R(angle,axis)
即。有效矩阵乘以从给定参数构造的旋转矩阵。类似于比例和翻译。
如果这种情况看起来像是相机或放置物体,完全取决于这些操作的组合方式和顺序。
但是对于OpenGL,只有数字/向量(顶点属性),它们以某种方式转换为二维视口坐标,被绘制为以线条或三角形填充的点。
答案 1 :(得分:1)
glRotate
适用于当前矩阵。因此,它取决于矩阵是相机还是世界变形。要了解有关当前矩阵的更多信息,请查看glMatrixMode()。
寻找示例只是谷歌搜索:I found this one,为了我,我应该帮助你弄清楚发生了什么。