Three.js scene.remove 与 visible=false

Three.js scene.remove vs. visible=false

如果我从场景中移除() 一个Object3D,它不会被渲染但会保留在内存中。如果我将该对象的可见 属性 设置为 false,它将不会被渲染,但会保留在内存中。有什么区别?

上下文:当我有很多复杂的网格存在时,我遇到了性能问题。任何时候只需要显示一个。其他的通常用visible = false隐藏。

嗯,不同的是,当你移除场景中的object时,它就从场景中移除了,即不再是children当中了。而当它只是设置为不可见时,它仍保留在场景数据结构中,可用于计算,例如将其他 object 旋转到它。

但是对于渲染来说,最终没有区别,这两种方法都是从绘图中省略 object。

一个实际有用的区别是,如果您需要隐藏和显示 object 很多,设置可见标志是快速和轻量级的,而操纵场景则是更复杂、更繁重的操作。因此,暂时隐藏您知道很快会再次显示的 object 是配置可见性标志的好主意,并删除您可能不再带回来的 object 最好将其从现场。或者实际上,如果您需要它进行计算,例如向它旋转某些东西(并且它本身可能会在某个层次结构中移动)。

为了真正释放内存,您需要从场景中移除 object,但也要处理它正在使用的数据,如示例中所示。 freeing memory in three.js