深度测试 depth testing
作为openGL渲染的最后一步,在fragment shader之后,依次进行 裁剪测试->模板测试->深度测试
当深度测试开启之后(默认关闭),gl会把每个从fragment shader中生成的fragment(像素片段)的深度值与frame buffer中相应的fragment的深度值进行比较。如果通过了深度测试(由你定义通过的条件)那么frame buffer中的fragment被新生成的fragment所替代。相反没通过则丢弃所生成的fragment。
primitive assemble(几何基元组装)是由一个顶点位置集合(set)按顺序组成。每个顶点都有z轴坐标值。
这个坐标被放缩,偏移使其落在0到1之间,负数表示在摄像机屏幕之后,眼睛的后面,这个范围被视为正常可见范围(当然你也可以设置成所有范围可见无论0-1,但通常我不建议这么做,除非你写的是外挂。。呵呵)。随后深度测试时,就测试framebuffer中的深度值与新生成的fragment哪个深度值从正向更趋近于0,0代表眼睛的位置。1代表无限远。。具体参见齐次坐标系。
就像上面所述的那样,你可以选择自己想要的深度比较函数,来决定是否它应该通过测试,而非默认的正向靠近0作为通过条件。设置深度比较函数,使用glDepthFunc(),它的原型是
void glDepthFunc(GLenum func);
这里的func是可选深度比较操作函数之一,合法可选值在下表。
参数(function) | Meani