3.4 Rasterization
这个步骤就是之前提过的光栅化(Rasterizing)。经过了之前许多的坐标转换之后,现在我们的Vertex坐标是在Screen coordinate上了。一个三角形的三个Vertex的坐标可能如下: X Y Z Vertex 0 (201.8 ,255.4 ,0.325) Vertex 1 (240.5 ,260.3 ,0.400) Vertex 2 (229.2 ,266.3 ,0.277) X,Y坐标的值不一定是整数,而Rasterizing可以理解为在找出三角形内部有哪些整数点的过程。因为这些整数点就代表了屏幕上的每个像素(Pixel)。Z轴的值通常是在0~1之间,是为了硬件的理由,方便Z-buffer以定点数来储存。
之前说过,Rasterize最简单的方法就是scan-line,先固定Y坐标,对着X坐标横着搜查。再将Y坐标往下一行,如扫瞄线般。但事实上今日的硬件在做Rasterize的时侯「Z字形」的去搜寻的。如下图所示,每个数字代表一个整数点pixel被搜寻到的顺序:
1 2 5 6 17 18 21 22 65 66 69 70 3 4 7 8 19 20 23 24 67 68 9 10 13 14 25 26 29 30 11 12 15 16 27 28 31 32 33 34 37 38 35 36 39 40 41 42 43 44
剩下的数字还有45~64都省略掉了,但是仔细看推敲一下相信不难懂。
这样做的好处有很多,包括确保了数据的Locality、方便Supersample或Multisample的实作等等。这部份的出现的名词稍微深入了一点,如果不懂也没关系,因为不影响之后的章节。
Rasterize之后,我们把处理的对像从顶点(Vertex)变成了像素(Pixel)。以此为分界整个3D pipline在处理Vertex的部份被称为前端(front-end),而处理像素的部份则是后端(back-end)。
|