在OpenGL中glRotate旋转相机或旋转世界轴还是旋转模型对象?

我想知道glRotate是否旋转相机,世界轴或物体。 解释它们与示例的不同之处。

相机

OpenGL中没有摄像头。

世界轴

OpenGL中没有世界。

或对象。

OpenGL中没有对象。

困惑?


OpenGL是一个绘图系统,使用点,线和三角形操作。 OpenGL中没有场景或世界的概念。 所有的顶点都有一组属性,OpenGL的状态决定了顶点如何变成像素。

此过程的第一个阶段是获取视口中的顶点位置。 在固定function管道(即没有着色器)中,为了获得这些,每个顶点位置如果首先乘以所谓的“模型视图”矩阵,则中间结果用于照明计算,然后乘以“投影”矩阵。 在剪切之后,然后应用归一化到视口坐标。

我提到的那两个矩阵有两个目的。 第一个“模型视图”用于对输入顶点应用一些变换,以使它们最终位于相对于原点的所需位置。 第一个移动几何体与世界某个地方没有区别,然后在世界范围内移动视点。 或者将观点保持在原点并使整个世界相反。 所有这些都可以通过modelview矩阵来描述。

第二个“投影”与标准化过程一起工作,表现得像一种“镜头”,可以这么说。 通过这种方式,您可以设置视野(以及一些其他参数,例如shift,您需要某些应用程序 – 不必担心它)。

关于矩阵的有趣之处在于,它们是非交换的,即对于两个给定矩阵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,只有数字/矢量(顶点属性),它们以某种方式转换为二维视口坐标,被绘制为填充在线之间或三角形的点。

glRotate适用于当前矩阵。 因此,它取决于矩阵是相机还是世界变形。 要了解有关当前矩阵的更多信息,请查看glMatrixMode() 。 寻找示例只是谷歌搜索: 我发现这个 ,为了我应该帮助你弄清楚发生了什么。