2012-03-20 89 views

回答

1

glRotate适用于当前矩阵。所以它取决于矩阵是相机还是世界转换。要了解更多关于当前矩阵的内容,请看glMatrixMode()。 查找范例仅仅是谷歌搜索:I found this one,为了我应该帮助你弄清楚发生了什么。

+1

glMatrixMode用于在OpenGL使用的不同矩阵之间切换。然而,没有独特的相机矩阵。有投影矩阵,但其行为更像是一个相机镜头,而不是整个相机。视图随模型视图矩阵一起移动,模型几何图形也一样。 – datenwolf 2012-03-20 18:43:33

+0

如何获取相机矩阵和世界矩阵并对其应用变换?是我们在opengl中输入的关于世界坐标框架的顶点坐标 – topcoder 2012-03-25 08:47:16

+0

@topcoder'相机'是由视角矩阵驱动的。看看第一部分的datenwolf回复 – 2012-03-25 08:51:40

8

相机

有在OpenGL没有摄像头。

世界轴

有在OpenGL没有世界。

或对象。

OpenGL中没有任何对象。

困惑?


OpenGL是一个绘图系统,使用点,线和三角形进行操作。 OpenGL中没有场景或世界的概念。所有存在的顶点都有一组属性,并且存在OpenGL的状态,它决定顶点如何转换为像素。

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

我提到的那两个矩阵有两个目的。第一个“模型视图”被用来对进入的顶点应用一些变换,以便这些变换最终位于相对于原点的期望位置。第一个移动的几何体与世界上的某个地方没有区别,然后移动世界中的观点。或者将观点保留在原点并将整个世界推向相反的方向。所有这些都可以通过模型视图矩阵来描述。

第二个“投影”与规范化过程一起工作,就像一种“镜头”,可以这么说。有了这个,您可以设置视野(以及一些其他参数,如移位,您需要某些应用程序 - 不用担心)。

约矩阵有趣的是,他们是不可交换的,即对于两个给定矩阵N,M

M * N =/= N * M ; for most M, N 

这最终意味着,您可以撰写一系列的变换A,B的, C,D ...通过将原始变换以正确的顺序彼此相乘而变换成单个复合变换矩阵T.

OpenGL矩阵操作函数(它们已经过时了),就这么做。你具有例如选择用于操作的矩阵(矩阵模式)的模型视图M.然后glRotate有效执行此:

M *= R(angle,axis) 

即有源矩阵乘上从给定的参数构成的旋转矩阵。类似的规模和翻译。

如果这看起来像是照相机或放置对象的行为完全取决于这些操作如何以及以何种顺序组合。

但是对于OpenGL,只有数字/矢量(顶点属性),它们以某种方式转换为二维视口坐标,然后绘制为填充为线或三角形的点。

+0

+1(当然其余的也很好)。 – 2012-03-20 20:26:09