我在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缓冲区中,哪些会导致这样的差异?
答案 0 :(得分:2)
假设您将视口的MinZ / MaxZ设置为相同以及投影中的近和远剪辑值,两个API在深度缓冲区中的存储没有区别矩阵在两个版本中设置相同。