3.6 Raster operation (ROP) 在前一个Pixel operation的Stage中,我们最后得到了Pixel的颜色(RGBA)、深度(Z)等各种记录在Pixel上的信息。最后我们要决定要将什么颜色输出到Framebuffer上。
这里提到了一个名词:Framebuffer,它的意思是在输出到屏幕之前,将目前Rendering的结果都存在一个缓冲存储器(buffer)里。等整个Frame都完成之后再输出到屏幕上。通常我们透过双重缓冲(Double-buffering)的技术,在两个buffer之间切换。一个buffer输出到屏幕的同时,在另一个buffer里Render下一个frame,完成之后就切换过来。
因此,Raster operation就是一个把Pixel颜色填进frame buffer的过程。例如下列的操作:
3.6.1 Scissor Test (剪切测试) 测试目前的Pixel X,Y坐标是否在程序设计者指定的范围内,比如 (10,10)到(20,20)的矩形之内。若否的话,直接将此Pixel忽略(Discard)掉而不改变framebuffer。 . 3.6.2 Alpha Test (透明度测试) 测试目前的Pixel Alpha值是否大于、小于、等于某个数值,由程序设计者指定该值与测试的方法。若没通过测试,一样将此Pixel Discard掉。 . 3.6.3 Depth & Stencil Test (深度与模版测试) 深度测试,是将目前depth-buffer(深度缓冲,可能有z-buffer及w-buffer)中的值与目前Pixel的Z值做比较,来测试目前的Pixel是在已经绘制好的图片前方(靠近屏幕)或之后。一般来说若是在之后,则将Pixel discard掉,在前则继续绘制,并把深度缓冲中的值更新为目前Pixel的深度。 . 从前的深度测试只有z-buffer,也只能做固定的测试。但是其实今日较为自由的Pipeline是允许程序设计者自由决定Depth-Test的行为的(就像Alpha Test一样)。 . Stencil Test与Depth-buffer类似,是将目前的Stencil-buffer与固定的值做测试若是通过测试则继续下去,并将Stencil-buffer的值做某些改变。
|