3d 场景中的 JavaFX 深度测试导致 Z 冲突
JavaFX Depth Testing in 3d Scene leading to Z-fighting
我创建了一个应用程序,它获取 DTED 位置数据并创建基本轮廓网格。启用深度测试后,这工作正常,我没有简单地渲染地形的问题。
我 运行 遇到的问题是,当我在地形表面上放置对象时,我会遇到很多 z 冲突,导致 boxes/spheres 中的视觉损坏。除了修改 nearclip/farclip?
之外,还有什么方法可以缓解这种情况吗?
我试过使用 .1 的 nearclip 和 5000 的 farclip,但仍然有很多闪烁。请记住,我的地形可能有 100k 个单位宽,所以我想将我的远夹保持得足够高,以便一次查看整个地形。我已经解决了与 FX 中的深度缓冲区相关的每个问题,但除了 near/farclip 设置之外,还没有找到任何有助于缓解它的方法。
经过大量修改后,我发现调整远夹对减少闪烁没有帮助。但是,如果我将 nearclip 设置为 1,我可以获得 500k 的 farclip,几乎没有闪烁。
我在使用 JavaFX 时遇到了同样的问题。您的解决方案对我有用,但我很好奇为什么会这样,特别是因为我发现有人遇到同样的问题,但在 Autodesk Maya 中。
这背后的原因当然是深度缓冲精度。当 zFar 平面移开或 zNear 平面靠近时,会损失太多精度。这对 zNear 平面的影响远大于 zFar 平面。
khronos 的 OpenGL wiki 上有一个很好的解释:Depth Buffer Precision
TL;DR:始终将 zNear 平面移得尽可能远,将 zFar 平面移得尽可能近。
我创建了一个应用程序,它获取 DTED 位置数据并创建基本轮廓网格。启用深度测试后,这工作正常,我没有简单地渲染地形的问题。
我 运行 遇到的问题是,当我在地形表面上放置对象时,我会遇到很多 z 冲突,导致 boxes/spheres 中的视觉损坏。除了修改 nearclip/farclip?
之外,还有什么方法可以缓解这种情况吗?我试过使用 .1 的 nearclip 和 5000 的 farclip,但仍然有很多闪烁。请记住,我的地形可能有 100k 个单位宽,所以我想将我的远夹保持得足够高,以便一次查看整个地形。我已经解决了与 FX 中的深度缓冲区相关的每个问题,但除了 near/farclip 设置之外,还没有找到任何有助于缓解它的方法。
经过大量修改后,我发现调整远夹对减少闪烁没有帮助。但是,如果我将 nearclip 设置为 1,我可以获得 500k 的 farclip,几乎没有闪烁。
我在使用 JavaFX 时遇到了同样的问题。您的解决方案对我有用,但我很好奇为什么会这样,特别是因为我发现有人遇到同样的问题,但在 Autodesk Maya 中。
这背后的原因当然是深度缓冲精度。当 zFar 平面移开或 zNear 平面靠近时,会损失太多精度。这对 zNear 平面的影响远大于 zFar 平面。
khronos 的 OpenGL wiki 上有一个很好的解释:Depth Buffer Precision
TL;DR:始终将 zNear 平面移得尽可能远,将 zFar 平面移得尽可能近。