6

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

根据我的研究,我发现部分问题是我的相机的近距设置太小,如链接的文章中所述,z-sorting 中的近距值较小会导致四舍五入,以使非常远的物体变得糊涂。

这里的复杂性在于,当相机放大时,我需要有细粒度的 z 索引,以查看航天器(与地球相比,半径最大为 61 米的物体,重量为r =~ 6.5e+06 meters)。为了使月球和地球规模的物体以正确的顺序渲染,近处必须至少为 100,000 m,此时我无法看到近处的物体。

一种解决方案是缩小比例以使用公里,但我不能失去这种精度,而是更喜欢使用米。

关于如何以正确的 z 索引渲染非常大的、遥远的物体,同时保持比例和放大小物体的能力的任何想法?

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

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

2 回答 2

6

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

this.renderer = new THREE.WebGLRenderer({antialias: true, logarithmicDepthBuffer: true});
于 2015-06-29T19:51:24.430 回答
0

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

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

于 2015-06-29T19:05:49.687 回答