在实时计算机图形学中,可以将管线结构粗略地分为3个阶段:应用程序、几何、光栅。
应用程序阶段由应用程序来驱动,因此可以通过软件来实现。这个阶段可以包括碰撞检测、加速算法、动画以及力反馈等。几何阶段,可以用软件或硬件实现,包括变换、投影、光照等处理。此阶段主要计算绘制的内容、如何绘制,以及在什么地方绘制。光栅阶段是利用前面阶段产生的数据进行图像绘制。
在应用程序阶段的末端,将需要绘制的几何体输入到绘制管线的下一个阶段,这些几何体都是绘制图元(如点、线、矩形等)。这就是应用程序阶段的主要任务。
几何阶段主要负责大部分多边形和顶点操作,可以将这个阶段进一步划分为几个功能阶段。如图:
1) 模型与视点变换
在屏幕上的显示过程中,模型通常需要变换到若干不同的空间或坐标系统中。模型变换的变换对象是模型的顶点和法线。物体的坐标为模型坐标,如果将模型变换应用到这些坐标中,就可以说这个模型位于世界坐标系。相机在世界坐标系中有一个位置和方向,用来放置和校准相机。为了方便投影和裁减,必须对相机和所有模型进行视点变换。如图:
所有的模型变换和视点变换都用一个4x4矩阵来实现。出于效率的考虑,在模型变换之前首先将所有的矩阵联合起来,彼此相乘,形成一个矩阵。需要注意的是,经过这种方式,世界坐标系(World)将不复存在——模型直接变换到了观察空间。(View)。
2)光照和着色
为了让模型看起来更加真实,可以给场景配上一个或多个光源。对于受光源影响的模型来说,可以用光照方程来计算模型上每个顶点的颜色。通常,光照计算是在世界坐标系中进行的。但是,如果对光源进行视点变换,在观察空间中会得到同样的光照效果。这是因为,即使将参与光照计算的所有实体都变换到同一个空间(即观察空间)中,光源,相机以及模型之间的相对位置依然保持不变。
3)投影
在光照处理之后,绘制系统就开始进行投影,目的是将视体变换为一个单位立方体,这个单位立方体的对角顶点分别为(-1,-1,-1)和(1,1,1,)。通常也称单位立方体为规范视体。目前主要有两种投影方法,平行投影(也称正投影)和透视投影。
平行投影的可视体通常是一个矩形盒子,平行投影可以将这个视体变换为单位立方体。平行投影的主要特性是平行线在投影之后彼此依然保持平行。这种变换是平移和缩放的组合。
透视投影中,物体距离相机越远,投影之后变得越小。所以透视变换和人类感觉物体大小的过程非常相似。透视投影的视体是一个以矩形为底面的被截金字塔,同样也可以把这个锥平截头体变换为单位立方体。
平行投影和透视投影都可以通过4x4矩阵实现。在任何一种变换后,都认为模型位于归一化处理后的设备坐标系(规范化设备坐标系)。
这种投影形式将模型从三维投影到二维。投影之后产生的图像中的z坐标系将不复存在(但是在Z缓冲器中保留有z坐标值)。
4)裁减
舍弃掉超出单位立方体(规范视体)的图元。
5)屏幕映射
光栅阶段
光栅阶段的目的是给每个像素正确配色,这个过程称为光栅化,也就是把屏幕空间的二维顶点转化为屏幕上的像素。屏幕空间有一个z值(深度值)、一种或两张颜色,以及一组或多组纹理坐标,纹理坐标会与顶点联系在一起。不像几何阶段那样进行的是单多边形操作,光栅化进行的是单个像素的操作。每个像素的信息存储在颜色缓冲器里, 颜色缓冲器是一个矩形的颜色序列,光栅阶段必须在硬件中完成。(管线图有时候用两个部分描述这个阶段。第一部分是三角形设置,其中计算三角形表面的各种微分和其他数据,第二部分为光栅化,其中对像素进行检查并填充。
为了避免观察者体验到对图元进行处理并发送到屏幕的过程,图形系统一般采用双缓冲机制,也有三缓冲等。这说明屏幕的绘制是在一个后置缓冲器中以离屏方式进行的。当完成后台的绘制,后置缓冲器中的内容就不断与已经在屏幕上显示过的前置缓冲器中的内容进行交换。
Z缓冲器(深度缓冲器)是用来负责可见性问题的。比如,一个距离相机更近的物体会挡住后面的物体。Z缓冲器和颜色缓冲器的形状大小一样,每个像素都存储着一个z值,这个z值是从相机到最近图元的距离,当将一个图元绘制为相应的像素时,需要计算像素位置处图元的z值并与同一像素的Z缓冲器中的内容进行比较。如果这个z值远远小于Z缓冲器中的z值,那么像素的z值和颜色就由当前图元对应的z值和颜色进行更新。否则不变。在这个Z缓冲器算法中,像素的绘制顺序是任意的。注意:对于部分透明的像素的绘制,必须在所有非透明像素绘制之后进行。
模板缓冲器的内容以后讲解。