OpenGL学习路程(一) 之理解OpenGL中的基础变换

1.什么是变换?

在计算机图形学中,那些我们所见到的大多数3D图形并不是真正的3D,而只是将3D数据“压扁”成2D数据在显示屏上显示出来,这个过程我们称之为“投影(projection)”,但是我们需要清楚的认识到的是变换中的一种而已。变换还可能有很多其他形式,比如旋转,移动等等。

在我们指定顶点和这些顶点出现在屏幕上的这段时间里,一般可能会发生3种类型的几何变换:视图变换,模型变换和投影变换

             变换类型                    应用

             视图变换                    指定观察者或照相机的位置

             模型变换                    在场景中移动物体

             模型视图变换                 描述视图和模型变换的二元性

             投影变换                     改变视景体的大小或重新设置它的形状

             视口变换                    伪变换,只对窗口上的最终输出进行缩放

1.视图变换

视图变换是应用到场景的第一种变换。是用来确定场景中的有利位置,默认情况下,透视视图的观察点位于源点(0,0,0),并沿着Z轴的负方向进行观察,通俗的说,就像刚刚好把你的头正对着摁在显示屏上,看向显示屏内部,绘制在Z轴坐标为正的位置的对象则在你的身后。然而在,正投影中,观察者被认为在Z轴正方向无穷远的位置,能够看到视景体中的任何物体。说白了,视图变换就好比如首先要确定你是从什么地方看过去。从大局考虑,在应用其他任何变换之前,必须先应用视图变换。

2.模型变换

模型变换主要是对场景中的特定对象进行操作,一般包括将对象移动到特定位置,在进行旋转和缩放。

一般应用的最普遍的模型变换有3中,分别为平移变换,旋转变换,缩放变换。

这部分比较简单,不做赘述。

3.模型视图变换

至于模型视图变换的产生,主要是由于,视图变换和模型变换按照内部效果和对场景的最终外观来说是一样的。举个例子来说吧,你坐在车子里面,看到后面的车超过了我们的时候,会感到车在后退,这其实是一个相对的概念。而该变换不过是将两种变换在变换管线中进行组合,成为一个独立的变换矩阵,就好比如将视图变换矩阵和模型变换矩阵相乘得到了一个新的矩阵,我们称之为模型视图矩阵。

4.投影变换

投影变换将在模型视图变换之后应用到顶点上。这种投影实际上定义了视景体并创建了裁剪平面。裁剪平面是3D空间中的平面方程,OpenGL用它来确定几何图形对于观察者来说是否可见。具体的来说,投影变换指定一个完成的场景(所有的模型变换都已经完成)是如何投影到屏幕上的最终图像。

正投影:精确的按照指定的相对大小来在屏幕上绘制,属于直接映射到2D屏幕上,一般用于2D绘制(也可用于3D绘制)

透视投影:最大的特点就是透视缩短,这种特性使得远处的物体看起来小一些,就像一条马路的远处一定比近处要窄。(一般用于3D渲染)

5.视口变换

当上述所有变换都完成后,就得到一个场景的2维投影,将被映射到屏幕上的某处窗口上。这种到物理窗口坐标的映射是最后要做的变换,即视口变换。通常颜色缓冲区和窗口像素之间存在着一一对应关系(并非任何时候都是这样),幸运的是,一般不用我们去操心这一块。

 

posted on 2013-08-08 14:38  liygcheng  阅读(284)  评论(0编辑  收藏  举报

导航