深度模板视图(depth/stencil)
1. 什么是深度测试?
深度测试, 如我们再第二章所主意的那样,用于确保物体表面以正确的顺序来绘制和显示,而不需要进行多边形排序。 例如,如果我们有两个三角形,它们有相同的 X 和 Y 坐标,但是在 Z 轴上相差 100 个单位,那么这两个三角形并没有接触或重复,如果我们先绘制较近的三角形再绘制较远的那个,则较远的那个三角形的颜色数据将会覆盖较近靠近照相机的那个三角形的颜色数据。 这一般不是我们想要的结果,如果我们想正确绘制这些三角形,即较近的三角形比较远的三角形显示得更靠前,则我们必须花费一些性能开销进行这些多边形排序(译者注:依深度排序)以使得我们可以按正确的顺序渲染。
但是排序多边形并不是一种低开销的操作,一个场景中通常有成千上万的多边形,并且需要在每一帧都渲染。深度缓存是一个相对简单的概念,用来消除在输出这些多边形到图形硬件之前的预排序操作。 每次一个表面需要渲染时,它的顶点都需要通过模型-视图投影矩阵进行变换。 表面的每一个顶点的深度以及位于表面的像素的内插值深度,都通过硬件进行计算。 深度缓存存储着每一个已经被渲染的像素的深度,通过这些深度来决定(通过硬件完成)当前正在渲染的像素是否比之前已经渲染的像素更靠近观察者。如果当前正在渲染的像素深度比之前已经渲染的像素深度更靠近,则该位置的颜色缓存将被更新显示。 换句话说, 最后渲染到屏幕上的颜色缓存,深度缓存,和其他附加的目标对象都是由这些通过深度测试的像素来更新。 如果像素没有通过深度测试,