【问题标题】:In DirectX, what values is stored in the depth value? Does this differ between DX9 and DX11?在 DirectX 中,深度值中存储了哪些值? DX9和DX11有区别吗?
【发布时间】:2023-04-07 18:02:01
【问题描述】:

我在 DirectX 11 和 DirectX 9 中使用相同的投影/视图矩阵渲染相同的几何图形。顶点着色器使用

Output.oPosition = mul(float4(Position, 1.0), mul(mul(mHookModel, mHookView), mHookProjection));

在两个 API 中。然后我正在读取每个 API 中的深度模板/z 缓冲区值。我在两个 API 之间得到了非常不同的值。在 DX9 中,对于部分场景,我的值介于 0.17 和 0.99 之间。对于同样的分数范围,我在 DX11 中的得分在 0.08 到 0.10 之间。相同的几何形状,相同的矩阵,非常相似的着色器。有谁知道顶点着色器(插值)中的哪些值最终存储在深度模板/z 缓冲区中,什么会导致这样的差异?

【问题讨论】:

    标签: c++ directx directx-11 hlsl directx-9


    【解决方案1】:

    假设您已将视口的 MinZ/MaxZ 设置为相同并且投影矩阵中的远近剪辑值在两个版本中设置相同,则这两个 API 在深度缓冲区中存储的内容没有区别。

    【讨论】: