【发布时间】:2017-10-16 16:32:49
【问题描述】:
我有一个简单的场景,包括房间、几个光源和播放器。玩家网格应始终在房间网格之上渲染。按照this 问题的公认答案,我应该创建两个不同的场景:一个用于房间,一个用于播放器。事实上,在这种情况下,除了一件事之外,一切都很好——玩家网格将不再受到房间场景光源的影响。当然,我可以在玩家场景中复制光源,但在我看来这是一个糟糕的决定(我想会有阴影问题)。
这个问题有什么简单的解决办法吗?
【问题讨论】:
-
解决您问题的方法可能不是您问题的答案。用一个场景试试这个:
player.renderOrder = 999; player.onBeforeRender = function( renderer ) { renderer.clearDepth(); }; -
@WestLangley 它给了我同样的效果,当
depthTest到false在每个网格材料上设置。我喜欢这个想法,但正如我在下面的一个 cmets 中提到的,我的播放器网格是SkinnedMesh,具有不同的材料,我不知道如何为这个网格的不同部分设置renderOrder。 -
不可能是一样的。在网格上将
depthTest设置为false会导致各种伪像,因为网格不会针对自身进行深度测试。 -
@WestLangley 事实证明,我不能每次调用侦听器时都调用
clearDepth。onBeforeRender函数的第五个参数是网格材料之一。仅当给定材质是网格的最顶层材质时,我才开始调用clearDepth。它给了我想要的行为。现在我有点担心:与在渲染通道之间调用clearDepth相比,这种方法对性能有什么显着影响吗? -
我不希望,我希望你什么也看不到。
标签: three.js