OpenGL初探:变换

来源:互联网 发布:plc与单片机区别 编辑:程序博客网 时间:2024/06/08 23:35

绝大多数3D图形并不是真正3D的。我们使用3D的概念和术语来描述看上去像3D的东西,然后把这种3D数据“压平”到2D的计算机屏幕上。这种把3D数据压平为2D数据的过程称为投影。我们可以使用不同的投影类型(正投影或透视投影)来确定投影过程中希望出现的变换类型。但是,投影只是OpenGL所产生的诸多变换中的一种。变换还包括旋转物体、移动物体,甚至对它们进行缩放和扭曲。

指定了顶点之后,在屏幕上显示它们之前,一共会发生3种类型的变换:视图变换、模型变换和投影变换。


视觉坐标:

视觉坐标是根据观察者的角度而言的,与可能发生的变换无关。我们可以把它看成是“绝对的”屏幕坐标。因此,视觉坐标表示一种虚拟的固定坐标系统,常常作为一种参考系使用。

用OpenGL在3D空间中进行绘图时,所使用的是笛卡尔坐标系统。在不进行任何变换的情况下,这种坐标系统与我们前面刚刚介绍的视觉坐标系统相同。


视图变换:

视图变换是场景所应用的第一个变换。它用于确定场景的拍摄点。在默认情况下,在透视投影中,观察者是从原点向z轴的负方向看过去(垂直“穿入”监视器屏幕)。这个观察点相对于视觉坐标系统进行移动,以提供一个特定的拍摄点。当观察者位于原点时,场景中所绘制的z值为正的物体就位于观察者的后面。

视图变换允许把观察点放在自己所希望的任何位置,并允许在任何方向上观察场景。确定视图变换就是在场景中放置照相机并让它指向某个方向。

作为总体原则,在进行任何其他变换之前必须先指定视图变换。原因是视图变换的效果相当于根据视觉坐标系统移动当前所使用的坐标系统。然后,根据最新修改的坐标系统进行其他所有的后续变换。


模型变换:

模型变换用于对模型以及模型内部的特征物体进行操纵。它可以移动物体,对它们进行旋转,或者对它们进行缩放。

场景或物体的最终外观很大程度上取决于模型变换的应用顺序。对于移动和旋转,情况更是如此。


模型视图对偶性:

事实上,根据视图和模型变换的内部效果以及它们对场景的最终外观所产生的效果,它们实际上是一样的。之所以对两者进行区分,纯粹是为了方便程序员。向后移动物体和向前移动参考系并没有真正的区别。模型视图这个术语表示我们既可以把这个变换看成是模型变换,也可以把它看成是视图变换,它们之间并不存在区别。因此,我们可以将其通称为模型视图变换。

因此,视图变换并没有特别之处。从本质上说,它只是在绘制物体之前应用到一个虚拟物体(观察者)之上的一种模型变换。在场景中方式更多的物体时,需要不断指定新的变换。按照约定,最初进行的变换作为参照,其他所有变换均以它为基础。


投影变换:

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

在正投影(或平行投影)中,屏幕上所绘制的所有多边形都按照指定的相对大小出现。直线和多边形使用平行线直接映射到2D屏幕上。这意味着不管物体有多远,都仍然按照相同的大小进行绘制,平面地出现在屏幕上。这种类型的投影通常用于CAD或渲染二维图像(例如蓝图)和二维图形(例如文本或窗口的菜单)。

透视投影所显示的场景更接近真实,它和蓝图不一样。透视投影的标志性特点就是透视缩短(foreshortening),它会使远处物体看上去比相同大小的近处物体小一些。3D空间中平行的直线在观察者眼里并不总是平行的。以铁轨为例,铁轨是平行的,但是在透视投影下,它们看上去似乎会在远处的某个点交汇在一起。

透视投影的优点是不必判断直线在什么地方交汇,也不必操心远处的物体是如何变小的。我们所需要做的就是用模型视图变换指定场景,然后应用透视投影。OpenGL会为我们完成其间所需要的所有魔术。

正投影通常用于2D绘图,此时你所需要的是像素和绘图单位之间的准确定位。这方面的例子有示意图、文本以及2D图形的一些应用。在进行3D渲染时,如果渲染的深度与物体离视点的距离相比显得非常小,也可以使用正投影。透视投影则用于渲染那些具有宽广开放空间的场景或者那些包含了需要应用透视缩短物体的场景。在绝大多数情况下,3D图形所使用的都是透视投影。事实上,在正投影下观察3D物体总是令人感觉不太舒服。


视口变换:

当上面这些操作全部完成之后,最终所获得的是场景的二维投影,将被映射到屏幕上的某个窗口。这种到物理窗口坐标的映射是最后一个完成的变换,称为视口变换。通常,颜色缓冲区和窗口像素之间存在一对一的对应关系,但并非严格如此。在有些情况下,视口变换要把一种“规范化”的设备坐标重新映射到窗口坐标。幸运的是,我们不必操心这方面的细节。


原创粉丝点击