仅在发布版本中出现的 Direct3D 9 Z-Buffer 精度错误

Direct3D 9 Z-Buffer Precision Bug occuring only in release build

我目前遇到一个奇怪的问题,看起来像 Direct3D 9 的 Z 轴冲突。我怀疑我的问题实际上是 Z 缓冲区精度问题。

我注意到调试版本中绝对没有出现深度伪影(我使用的是 Visual Studio 2012)。该错误仅发生在发布版本中。

我目前使用的深度缓冲格式是 24 位填充 8 (D3DFMT_D24X8)。当我只使用 16 位时,确切的工件出现在调试和发布版本中。那是什么意思呢? DirectX 是否拒绝 24 位深度缓冲区?如果是这样,你为什么要这样做?

除此之外,我尝试设置 32 位,但它只是崩溃并且 returns D3D 设备的空指针。

非常感谢。

这是我的问题的屏幕截图:

好的,所以我最终找到了解决方法。我将我的场景划分为深度区域,并在清除每个通道之间的 Z 缓冲区后将它们一一渲染。

我目前有两个通道(0.1m 到 5m,以及 5m 到 10km)。这似乎现在工作得很好。