OpenGL模型变换和视图变换

转载 2015年11月19日 22:22:12
从“相对移动”的观点来看,改变观察点的位置与方向和改变物体本身的位置与方向具有等效性。在OpenGL中,实现这两种功能甚至使用的是同样的函数。 
由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵”。设置的方法是以GL_MODELVIEW为参数调用glMatrixMode函数,像这样: 
glMatrixMode(GL_MODELVIEW); 
通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。这也只需要一行代码: 
glLoadIdentity(); 

然后,就可以进行模型变换和视图变换了。进行模型和视图变换,主要涉及到三个函数: 
glTranslate*,把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。 
glRotate*,把当前矩阵和一个表示旋转物体的矩阵相乘。物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋转,参数angle表示旋转的角度。 
glScale*,把当前矩阵和一个表示缩放物体的矩阵相乘。x,y,z分别表示在该方向上的缩放比例。 

注意我都是说“与XX相乘”,而不是直接说“这个函数就是旋转”或者“这个函数就是移动”,这是有原因的,马上就会讲到。 
假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵v。所以,经过变换得到的顶点坐标就是((RT)v)。由于矩阵乘法的结合率,((RT)v) = (R(Tv)),换句话说,实际上是先进行移动,然后进行旋转。即:实际变换的顺序与代码中写的顺序是相反的。由于“先移动后旋转”和“先旋转后移动”得到的结果很可能不同,初学的时候需要特别注意这一点。 
OpenGL之所以这样设计,是为了得到更高的效率。但在绘制复杂的三维图形时,如果每次都去考虑如何把变换倒过来,也是很痛苦的事情。这里介绍另一种思路,可以让代码看起来更自然(写出的代码其实完全一样,只是考虑问题时用的方法不同了)。 
让我们想象,坐标并不是固定不变的。旋转的时候,坐标系统随着物体旋转。移动的时候,坐标系统随着物体移动。如此一来,就不需要考虑代码的顺序反转的问题了。 

以上都是针对改变物体的位置和方向来介绍的。如果要改变观察点的位置,除了配合使用glRotate*和glTranslate*函数以外,还可以使用这个函数:gluLookAt。它的参数比较多,前三个参数表示了观察点的位置,中间三个参数表示了观察目标的位置,最后三个参数代表从(0,0,0)到 (x,y,z)的直线,它表示了观察者认为的“上”方向。

OpenGL(4)-Opengl矩阵变换

Opengl矩阵变换矩阵变换 Opengl中有很多坐标系,但实际上他们只是思考方式的不同。opengl渲染图形耳朵过程可以和照相机照相的过程类比起来。用照相机照相的过程分为如下几个步骤: 1....

Qt5 实现程序图标以及动态托盘闪烁图标

http://blog.csdn.net/attilax/article/details/11927673 作者Attilax ,  EMAIL:1466519819@qq.com ...

OpenGL的视图和模型变换

初学OpenGL,怎么也得先搞懂坐标轴吧?几经周折,最后选择从视图和模型变换下手。 OpenGL的两个坐标系 世界坐标系: 以窗口的中心为坐标原点,X轴正方向为屏幕从左至右,Y轴正方向为屏幕从下至...

详解OpenGL中的各种变换(投影变换,模型变换,视图变换)

本文一些用于均参考《OpenGL编程指南(第8版)》,有兴趣的同学可以结合一起看。这篇算是整合补充。   OpenGL采用的是相机模型,就是把视图变换操作类比为使用照相机拍摄照片的过程,具体步骤...

5.OpenGL--3D世界(视图变换,模型变换,投影变换,视口变换)

理论基础  1,OpenGL渲染3D物体到屏幕上的过程其实类似我们平时用照相机拍照的过程,这个步骤大致如下:一,把照相机固定在三脚架并让它对准场景(视图变换)二,把场景中的物体调整摆放好(模型变换)...

OPENGL 变换视图模型变换与部分透视变换

时间:8:19 2010-12-31 8:19 --- 9:00 总结与计划 [OPENGL 学习] [ 视图和模型变换]     对变换进行的思考     模型变换     视...

OpenGL--3D世界(视图变换,模型变换,投影变换,视口变换)

理论基础 1,OpenGL渲染3D物体到屏幕上的过程其实类似我们平时用照相机拍照的过程,这个步骤大致如下:一,把照相机固定在三脚架并让它对准场景(视图变换)二,把场景中的物体调整摆放好(模型变换)三...

OpenGL中glMatrixMode()函数以及视图变换,模型变换,投影变换,视口变换的理解

OpenGL中的视图可以利用照相机来进行比拟。产生目标的场景的变过过程类似于相机拍照。此步骤大概分为三个: 1)把相机固定在三角架上,并让它对准场景(视图变换) 2)对场景安排,使得各个物体在招片中的...

OpenGl学习笔记3之模型变换、视图变换、投影变换、视口变换介绍

模型变换、视图变换、投影变换、视口变换介绍 opengl中存在四种变换,分别是模型变换,视图变换,投影变换,视口变换。这四种变换是图形渲染的基本操作,实质上这四种变换都是由矩阵乘法表示(这些操作都是...

【OpenGL】OpenGL视图和模型变换中各变换发生顺序的思考

在视图模型变换中,顶点v的变换是按照相反的顺序发生的,而不是按照它的代码中先后顺序出现的。下面举例说明。 考虑下面的代码: glMatrixMode(GL_MODELVIEW); glLoa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL模型变换和视图变换
举报原因:
原因补充:

(最多只允许输入30个字)