javascript 如何渲染THREE.组总是在其他项目前面

0yg35tkg  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(115)

我试图渲染一组变换控件,使它们对用户始终可见。然而,当我将DepthWrite设置为false或在变换控件上使用AlwaysDepth函数时,我得到了所需的结果,但变换控制器的各个组件也会在彼此之上渲染。
如果DepthWrite设置为false:

问题(示例):

期望的结果(变换控件应该是什么样子)

有没有办法将一个THREE.Group的DepthWrite设置为false,而不是它的单个组件,以便该组在其他对象之前呈现,但变换控件的单个组件的行为就像DepthWrite设置为true一样,以便它们不会在彼此之前呈现?

jv2fixgn

jv2fixgn1#

你可以将controls放在一个单独的场景中,这样它们就可以在主场景之后单独渲染。你还需要在渲染调用之间清除depthBuffer,这样它就可以在所有之前渲染的对象之上渲染。下面是一些伪代码来解释这个概念:

const controls = new THREE.Group();
const scene2 = new THREE.Scene();

scene2.add(controls);
scene2.autoClear = false

// Render loop
update() {
  renderer.clear()

  // Render all your regular objects
  renderer.render(scene1, camera);

  // Clear the depthBuffer
  renderer.clearDepth();

  // Render your controls
  renderer.render(scene2, camera);
}

您可以在文档中阅读有关.clearDepth()的更多详细信息。

相关问题