DirectX 11 学习笔记-05【深度模板】

深度缓冲区 

深度缓冲区(depth buffer)是一个不包含图像数据的纹理对象。常见的深度值范围在0.0 到1.0 之间,0.0表示离观察者最近的物体,1.0表示离观察者最远的物体。深度缓冲区中每个元素都与后台缓冲区中的每个元素一一对应。深度缓冲区主要用于判断物体的哪些像素位于其他物体之前,从而不用关心绘制物体的先后顺序。 

渲染时,当发现某个像素具有更小的深度值时,就更新该像素以及它在深度缓冲区中的相应深度值。通过一方式,在最终得到的渲染结果中只会包含那些离观察者最近的像素。而深度测试则是用当前像素片段的深度值和深度缓冲区中的像素深度进行比较,保留离观察者最近的像素。 

创建深度缓冲区时需要为它指定格式。模板缓冲区和深度缓冲区位于同一个纹理,所以格式中需要指定模板缓冲区和深度缓冲区对应的位数。 

创建好深度和模板缓冲区后,可以通过改变深度模板状态来控制深度测试/模板测试。 

使用D3D11_DEPTH_STENCIL_DESC来配置深度/模板状态 。

深度设置 

DepthEnable:启用/禁用深度测试。同时禁用情况下,深度缓冲区中的元素也不会被更新。 

DepthWriteMask:D3D11_DEPTH_WRITE_MASK_ZERO或D3D11_DEPTH_WRITE_MASK_ALL。可以用于禁用深度缓冲区的写入,禁用后深度测试仍然有效。 

DepthFunc:一般使用D3D11_COMPARISON_LESS。支持自定义的深度测试函数。 

这里要和RSstate中的DepthClipEnable区别。DepthClipEnable开关的是平截头相关的深度裁剪,对即超出平截头几何体的裁剪。 

模板设置 

StencilEnable:开启/关闭 

StencilReadMask:模板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值