着色器其实就是一段在GPU运行的程序。渲染流水线分为两种,其中一种为可编程渲染流水线。另外一种为固定渲染流水线。渲染流水线可否编程,取决于程序猿能否在定点着色器以及片段着色器上进行编码。而要让编写默认着色器的程序员把所有的情况一一列举,不仅会使得SDK非常庞大,而且也不太可能办到。所以,有必要让渲染流水线可编程,以满足用户无穷的胃口。着色器就是程序猿自己调的颜色。
渲染流水线包括了应用程序层 -> 硬件抽象层 -> 硬件层。
应用程序层:GPU会对我们一些不会进行绘制的物体进行剔除,比如物体的背面或者超出视域体范围的物体。数据总线,每次能够传输的数据量是有限的,并且数据总线是整台计算机共用的,在我们的游戏里面,数据总线把游戏里面的数据从内存传送到了GPU。
在可编程渲染流水线中,固定渲染流水线中的顶点变换与片段纹理映射和着色被分离出来,作为可编程顶点处理器与可编程片段处理器。
投影:把一个物体从n维变换到n-1维的过程称为投影。
视域体裁剪:在以摄像机为中心,由视线方向,视角和远近平面共同构成的一个梯形体,在梯形体内的物体可见,梯形体外的物体不可见。裁剪这部分不可见物体的过程称为视域体裁剪。
四维坐标由一般的三维几何坐标和利于处理透视问题的第四维齐次坐标组成。
几乎所有的RGB和向量函数都是内联的。用来提高效率。
隐藏面消除:BSP树和z缓冲器方法。
BSP树原理:根据视点的位置来判断渲染顺序,平面的隐式方程f1(p)=0,则位于一面的点坐标带入方程都会大于0,另一面都会小于0。当多个平面同时存在时,以一个平面为根,处于这个平面的小于0的方位的平面记为根的左子树,大于0的记为右子树,一次递归。视点在平面小于0的一侧时,先渲染数值大的,视点在平面大于0的一侧时先渲染相对数值小的。 如果有一个平片穿过另一个平面,则依据两平面相交的点A、B把三角形切成三个三角形,假设a、b在一侧,c在另一侧,分成的三个三角形分别是abA,bBA,ABc.在把这三个三角形依据基准平面添加到左子树或右子树里。
z缓冲器;