在DirectX中,深度值中存储了哪些值?这在DX9和DX11之间有区别吗



我在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缓冲区中吗?是什么导致了这样的差异?

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

最新更新