模型在
vertex shader和
rasterizer处理之后,
基本上是一个有颜色的模型了。
也就是说,在rasterizer处理之后,其实就已经算是一个3D的图像了。
但是,这个图像只是各个面被使用渐进色涂满而已,非常单调。
要想使图像的各个面上贴上别的图像,
或者,使各个面呈现半透明的图像,
就需要做其它处理。
这个处理,就是
pixel shader(像素着色器)
像素着色器,就是以rasterizer所产生的各个pixel为对象来进行各种处理,
让单调的图像成为有各种特别效果的图像。
pixel shader的内部被分为如下图所示的区域。
![](http://www.cppblog.com/images/cppblog_com/lijinshui/004.JPG)
其中,浅蓝色区域即为像素着色器处理部分。
绿色部分是像素测试部分。
在这里特别需要注意的是:在面上贴上图像的
Texture Mapping,
以及将颜色与目前已被画到rendering targer的像素产生混合的
blending处理;
以上几个处理,我们会在以后的小节里详细介绍。
下面我们先简单介绍一下像素测试部分。
上图的绿色部分即为像素测试部分。
像素测试分为
alpha test ,
stencil test ,
depth test三部分;
depth test 是比较常用的,有时候我们也叫深度测试,或者,Z测试;
在这个测试中,会依据各个像素所设定的深度资料,让原本就会躲到别的像素后面去的像素不被画出来。
具体来说,首先必须要有一个能够暂时储存画面上的各像素深度资讯的depth buffer,的暂存记忆体。
然后,在描绘各模型的各个像素时,若它的前面已经有其它的像素被描绘的话,则不进行描绘,
而若没有的话,进行描绘。并更新depth buffer的深度资讯。
这样以来, 即使是重叠关系复杂的多边形,也不会出现奇怪的结果,会以正确的前后关系来进行描绘。
关于alpha test ,stencil test
,会在以下小节里介绍。