[toc]

# 深度 / 模板缓冲区的格式

深度 / 模板缓冲区实际上也是一种纹理,故而必须使用纹理的格式创建它。
1. DXGI_FORMAT_D32_FLOAT_S8X24_UINT: 使用一个 32 位浮点数来指定深度缓冲区,并以另一个 32 位无符号整数来指定模板缓冲区。其中 8 位用于模板缓冲区映射 [0,255], 另外 24 位不可用。
2. DXGI_FORMAT_D24_UNORN_S8_UINT: 指定一个无符号 24 位深度缓冲区,并将其映射到范围 [0,1] 内,另外 8 位用于模板缓冲区映射范围 [0,255] 在绘制每帧画面之初,可以用下列方法来重置模板缓冲区中的局部数据 (也可以用于清理深度缓冲区) void ID3D12GraphicsCommandList::ClearDepthStencilView (…) 每帧都要清理

# 模板测试

我们可以通过模板缓冲区来组织后台缓冲区对特定区域的绘制行为,这项操作是上是通过模板测试进行的

1
2
3
4
if(StencilRef & StencilReadMask (比较函数) Value &  StencilReadMask)
accept pixel
else
reject pixel
  1. 其中左运算符 (StencilRef & StencilReadMask) 由程序中定义的 模板参考值 StencilRef 与程序内定义的掩码值 StencilReadMask 通过位与运算来加以确定的

  2. 右运算符由缓冲区中的值 Value 与程序定义的 StencilReadMask 来定义的

之后通过左运算符与右运算符进行比较 (通过比较函数,这里比较函数有大于 / 小于之类的), 然后如果返回 true, 则表示运算成功 DX12 支持的于是比较函数有如下几个

# 描述深度 / 模板状态

要描述深度 / 模板状态,就需要填写 D3D12_DEPTH_STENCIL_DESC 实例 模板同样需要通过配置到渲染管线来进行开启

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝