我有一个场景,我正在绘制(缩放)地球,月球和一些太空船。当月亮被地球遮挡,而不是消失时,它仍然是可见的(通过地球)。
从我的research我发现问题的一部分是我的相机的近设置太小了,正如文章中所详述的那样,z值排序中的近似原因的小值变得混乱对于非常遥远的物体。
这里的复杂性是我需要在相机放大时获得精细的粒度z指数,以查看航天器(与地球相比,半径最多为61米的物体,称重在r =~ 6.5e+06 meters
)。为了使月球和地球上的物体以正确的顺序渲染,近处必须至少有100,000米,此时我无法看到近处物体。
一种解决方案是减少使用公里数的规模,但我不能失去这种精度,并且更喜欢使用米。
关于如何制作非常大的远距离物体的任何想法都会在正确的z指数上渲染,同时保留比例和放大小物体的能力?
我的想法(我不知道如何实施):
答案 0 :(得分:4)
根据@WestLangley的回答,解决方案只是将选项logarithmicDepthBuffer: true
添加到渲染器:
this.renderer = new THREE.WebGLRenderer({antialias: true, logarithmicDepthBuffer: true});
答案 1 :(得分:0)
问题可能是z-test而不是z-precision。这意味着:z-test不适用(可能因为您使用alpha混合渲染透明对象)或z-test适用于非默认测试(例如覆盖远而不是近距离)。
尝试使用没有透明度的简单着色器渲染整个场景,以确保透明度不是错误的来源。 要在没有z-test的情况下解决z顺序,你应该在每一帧中自己对对象进行排序,以确定渲染的顺序(从远到近)。