什么是管线?管线,它用于描述一种过程,该过程可能涉及两个或者多个独特的阶段。这是摘自《OpenGL超级宝典》中的说法。
在《实时计算机图形学》一书中,将图形绘制管线分为三个主要阶段:应用程序阶段,几何阶段,光栅阶段。
应用程序阶段:使用高级编程语言(如C、C++、Java)等进行程序开发,主要和CPU、内存打交道。在该阶段的末端,几何体数据(顶点坐标、法向量、纹理坐标、纹理)等数据通过数据总线传送到图形硬件。在该过程检查其他输入信息源(键盘、鼠标、摇杆等)。
几何阶段:主要负责顶点坐标变换、光照计算、可视体裁剪、投影及屏幕映射。该阶段基于GPU进行计算。在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。
光栅阶段:基于几何阶段提供的数据,为像素正确配色。该阶段进行的都是单个像素的操作。
重点记录几何阶段中顶点坐标变换的过程。
起初,模型处于自身所在的模型坐标空间中,然后由此变换到世界坐标空间中(注意,世界坐标空间是唯一且固定不变的)。再由世界坐标空间变换到观察者坐标空间中(摄像机坐标空间)。之后,需要进行投影变换的操作。
投影变换的目的是将可视体变换为一个单位立方体。该单位立方体的对角顶点分别是(-1,-1,-1)和(1, 1, 1)。单位立方体又称为规范立方体(CVV)。根据投影类型的不同,正投影是将矩形盒子的可视体变换到单位立方体,而透视投影则更为复杂一些,是将锥形的可视体变换到单位立方体。我们在裁剪之前进行投影,可以让裁剪问题变得比较一致,并且是根据单位立方体进行裁剪,使裁剪过程简单化。总之,在图形渲染的几何阶段,顶点坐标变换的先后顺序是:
模型坐标空间 -->世界坐标空间-->观察者坐标空间-->屏幕坐标空间。
值得注意的是,光照计算也是在几何阶段进行的,它发生在顶点空间变换之后,在世界坐标空间或者观察者坐标空间之中进行。当光照计算完成之后,就会进入投影变换的处理。几何阶段是基于GPU进行的,计算密集型的过程。
在从观察者坐标空间变换到屏幕坐标空间的过程中,发生了投影变换与可视体裁剪这两个子过程。投影变换把裁剪空间由视锥体变到了规范立方体中(Canonical View Volnme,简称CVV),然后在CVV中进行了可视体裁剪,也就是由以下三个过程组成:
1、 使用透视变换矩阵,把顶点坐标从视锥体变换到CVV中,这个过程也就是所谓的投影。
2、 在规范立方体(CVV)中进行可视体裁剪。
3、 将裁剪后的坐标映射到屏幕坐标空间上。
最后进行的屏幕映射是为了将裁剪后的图元变换到屏幕坐标空间之中,找到屏幕上的对应坐标。