三.JS:以正确的z标记渲染大的、遥远的对象,并且仍然缩放到小对象



我有一个场景,我正在绘制(按比例)地球、月球和一些航天器。当月球被地球遮挡时,它并没有消失,而是仍然可见(通过地球)。

从我的研究中,我发现问题的一部分是我的相机的近距离设置太小了,正如链接的文章中所详细描述的那样,z排序中近距离舍入的小值会使非常遥远的物体变得模糊。

这里的复杂性是,当相机放大时,我需要有精细的z索引来观察航天器(与地球相比,半径最大为61米的物体,重量为r =~ 6.5e+06 meters)。为了使月球和地球尺度上的物体以正确的顺序渲染,近景必须至少为100000米,在这个点上我无法看到近景物体。

一个解决方案是将比例尺缩小到使用千米,但我不能失去这种精度,我更喜欢使用米。

关于如何使非常大、遥远的对象以正确的z索引渲染,同时保持缩放比例和缩放小对象的能力,有什么想法吗

我的想法(我不知道如何实现):

  • 是否更改z缓冲区以包含更多值和更高的分辨率
  • 将远处的对象添加到使用"farCamera"渲染的"farScene"中,该"farCamera"由特写相机上使用的相同控件控制

根据@WestLangley的回答,解决方案只是将选项logarithmicDepthBuffer: true添加到渲染器中:

this.renderer = new THREE.WebGLRenderer({antialias: true, logarithmicDepthBuffer: true});

问题可能是z测试,而不是z精度。这意味着:z测试不适用(可能是因为您使用alpha混合渲染透明对象),或者z测试应用非默认测试(例如,覆盖远而非近)。

尝试使用没有透明度的简单着色器渲染整个场景,以确保透明度不是错误的来源。要在不进行z测试的情况下求解z顺序,您应该在每帧中自己对对象进行排序,以确定渲染的顺序(从远到近)。

相关内容

  • 没有找到相关文章

最新更新