什么是深度缓冲(Depth Buffer)

2020-04-18 汽车 90阅读
深度缓冲是一个与你的渲染目标(render target)相同大小的缓冲,这个缓冲记录每个像素的深度。
当一个像素第二次被绘制时– 例如当一个物体在另一个物体之后被绘制-
深度缓冲要么保留前面的深度值,要么使用第二个像素的深度值替换当前深度值。那个深度保留哪个深度抛弃取决于你选择的深度函数。例如,如果当前深度函数是CompareFunction.LessEqual时,只有小于等于当前深度值的值才会被保留,而大于当前深度值的值会被抛弃。这叫做深度测试,每次绘制像素时都会进行深度测试。当对一个像素进行深度测试时,它的颜色会被写入渲染目标,而深度被写入深度缓冲。
像素的深度值是由视矩阵和投影矩阵决定的。在近裁平面上的像素深度值为0,在远裁平面上的像素的深度值为1。场景中的每个对象都需进行绘制,通常最靠近相机的像素会被保留,这些对象阻挡了在它们后面的对象的可见性。
深度缓冲通常还包含stencil bits – 所以深度缓冲又被叫做depth-stencil缓冲。深度格式(depth
format)表示深度缓冲的构造。深度缓冲总是32 bits,但可以用不同的方式组合,类似于纹理格式。常用的深度格式是Depth32,这种格式中32
bits都用来存储深度信息。另一个常用格式是DepthFormat.Depth24Stencil8,这种格式中24 bits用于深度计算而8
bits用于模版缓冲(stencil buffer)。DepthFormat.Depth24Stencil8Single不常用,这种格式使用24
bits以浮点数计算深度缓冲。在PresentationParameters中使用AutoDepthStencilFormat属性可以设置默认深度格式。
使用RenderState.DepthBufferEnable可以打开或关闭深度缓冲。使用
RenderState.DepthBufferFunction可以改变用于深度测试的比较函数。将ClearOptions.DepthBuffer传递给GraphicsDevice.Clear方法可以清楚深度缓冲。使用
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com