1.深度缓存
在介绍深度测试之前,我们先想象一下,情景中有很多物体,那么一个显而易见的问题就是物体的遮挡问题,即物体摆放的顺序问题,有哪些物体是必须靠近屏幕的,有哪些物体一定是放在某一个物体的前面的等问题。那么,我们处理这类问题的一个显而易见的方法就是,按顺序在屏幕上先处理最远的,然后依次由远到近一层一层进行处理,即像油画家画画一样的处理手法,由远及近,层层遮挡,我们把这种处理方法叫做画家算法。
但是这种按远到近的顺序处理,是要经过一系列判断的,有时候会出现无法判断到底哪个物体是离相机最远或者最近的情况,如下图。
在视图变换中,我们将摄像机的位置变换到了原点且摄像机看向-Z方向,这样会得到离相机越远其值越小,这里我们规定离相机越远其深度就越大。我们在来看上图,我们已经无法判断谁在前,谁在后了,因为三角形之间存在两两覆盖的情况。对于这个问题,我们既然不能够去确定三角形的前后顺序,但是我们可以比较容易去判断每一个像素的前后顺序,即深度。我们引入深度缓存(Z-buffer),即我们去记录像素内所表示的图像最浅的深度,也就是离我们最近的深度,为了完成深度缓存,我们在渲染得到最后的结果图的同时,也会生成每个像素所表示的几何物体的最浅深度信息