当前位置: 首页 > 知识库问答 >
问题:

三. js:以正确的z指示渲染大型远程对象,并且仍然放大到小对象

拓拔德馨
2023-03-14

我有一个场景,我正在画地球、月亮和一些宇宙飞船。当月球被地球遮挡时,它没有消失,而是仍然可见(通过地球)。

从我的研究中,我发现问题的一部分是我的相机的近距离设置太小了,正如链接的文章中所详述的,在z排序中近因舍入的小值对于非常遥远的物体来说是模糊的。

这里的复杂性是,当相机放大时,我需要有细粒度的z指数来观察宇宙飞船(一个半径最多为61米的物体,与地球相比,重量为r=~6.5e 06米)。为了使月球和地球尺度上的物体以正确的顺序渲染,近处必须至少为100,000米,在这一点上我无法看到近距离的物体。

一种解决方案是减少使用公里数的比例,但我不能失去这种精度,我更喜欢使用米。

关于如何使非常大的、遥远的对象以正确的z指数呈现,同时保持缩放成小对象的比例和能力,您有什么想法吗?

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

  • 更改z缓冲区以包含更多值和更高的分辨率

共有2个答案

靳越
2023-03-14

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

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

公西俊民
2023-03-14

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

this.renderer = new THREE.WebGLRenderer({antialias: true, logarithmicDepthBuffer: true});
 类似资料:
  • 我看不到子组件内部的文本。子级呈现为大小为0x0且为空。 那是由路由器引起的吗? 这是我的代码: App.js: REPODetails.js: 这是child committersCard.js: 我用的是4号路由器。

  • 问题内容: 在C中,我们可以找到的大小int,char等我想知道如何获得物体的大小就像一个字符串,整数,等在Python。 相关问题:Python列表(元组)中每个元素有多少个字节? 我使用的XML文件包含指定值大小的大小字段。我必须解析此XML并进行编码。当我想更改特定字段的值时,我将检查该值的大小字段。在这里,我想比较输入的新值是否与XML中的值相同。我需要检查新值的大小。如果是字符串,我可以

  • 本文向大家介绍JavaScript获得指定对象大小的方法,包括了JavaScript获得指定对象大小的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript获得指定对象大小的方法。分享给大家供大家参考。具体如下: 用法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 如果设置最大Java堆大小,那么单个对象可能的最大大小是多少? 假设我的应用程序只有一个类,而我正在创建一个对象。 该对象有大约大小限制吗? 我的课看起来像下面的课: 注意 正如我提到的JVM堆大小一样,我要求定量地回答。 问题答案: 理论上最大的Java对象(如果您有足够大的堆)将是带有2 31-1个元素的Java对象。那是16Gb。 但是,对于给定的堆大小,您将能够创建的最大对象取

  • 问题内容: 我有一个AJAX请求返回的json对象,而我遇到了一些麻烦,因为它一直在返回。只想知道我是否使用正确: 它们都是有效对象,即使它们都返回。 更新: 返回了JSON对象的示例: 问题答案: 你可以用这样的东西

  • 问题内容: 我正在运行的代码将创建包含多个用户定义类的大对象,然后必须对其进行序列化以供以后使用。据我所知,只有酸洗才能满足我的需求。我一直在使用cPickle来存储它们,但是它生成的对象大约是40G,来自运行在500 mb内存中的代码。序列化的速度不是问题,但是对象的大小是问题。我可以使用任何技巧或替代方法来使泡菜变小吗? 问题答案: 如果您必须使用pickle并且没有其他序列化方法对您有用,那