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

时间:2012-03-20 17:16:21

标签: c opengl

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

2 个答案:

答案 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,为了我,我应该帮助你弄清楚发生了什么。