总体架构:应用阶段(Application)--几何阶段--光栅化阶段--像素处理阶段
应用程序阶段:
执行碰撞检测、加速算法、剔除算法、动画、物理仿真等任务。
CPU执行,可以完全控制该阶段发生的事。应用程序阶段结束时,几何图元(点线三角形)会被输出给几何处理阶段。
几何处理阶段:
GPU中执行。负责处理大部分逐三角形和逐顶点的操作。
可以细分为:顶点着色、投影、裁剪、屏幕映射。
顶点着色 vertex shading
1. 计算顶点位置
模型变化顺序:模型空间、世界空间、观察空间(沿-z方向看,y轴指向上方、x轴指向右方)
2. 计算需要输出的顶点数据,如normal、uv。
顶点可以储存位置、法线、颜色等着色所需的任何信息,然后对这些信息进行插值。
投影变换
投影变换将 view volumn 转化为单元立方体,分为正交投影(view volumn为长方体)、透视投影(view volumn为视锥体)。
投影变换用 4x4的矩阵 构造。转换后的空间为裁剪坐标(齐次坐标),发生在用w做除法前。
可选的顶点阶段
曲面细分、几何着色、流输出
曲面细分器:将面片的顶点集合转换为更大的顶点集合,然后创建新的三角形集合。摄像机动态确定需要多少个三角形(靠近时生成很多,远离时生成比较少)。
几何着色器:读取各种图元产生新的顶点。广泛的应用是例子生成,可以获取每单个顶点生成火球/正方形。
流输出:选择将其输出到数组。
裁剪 Clipping
只有全部或部分位于视锥体内的图元才会执行光栅化阶段。部分位于视锥体内的图元要进行裁剪,在边界处生成新的线段或顶点,然后丢弃掉外部的顶点。
屏幕映射
得到NDC的坐标,xy坐标转化为屏幕坐标,z坐标(OpenGL中为 [−1,+1],DirectX 中为 [0,1])
光栅化:
三角形设置
计算三角形网格的表示数据(计算了三角形的微分、边缘方程和其他数据)。
三角形遍历
检查像素是否被三角形覆盖,如果覆盖生成一个片元。
像素着色
使用插值的着色数据作为输入,此处可以执行任何逐像素的着色计算。
合并
负责解决可见性。