什么是深度缓冲(Depth Buffer)
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 10:59:54
什么是深度缓冲(Depth Buffer)
什么是深度缓冲(Depth Buffer)
什么是深度缓冲(Depth Buffer)
深度缓冲是一个与你的渲染目标(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方法可以清楚深度缓冲.使用 DepthStencilBuffer类可以创建自己的深度缓冲.