Three.js scene.remove vs.visible = false

wag*_*ter 5 three.js

如果我从场景中移除()Object3D,则不会渲染它,但是它将保留在内存中。如果我将该对象的visible属性设置为false,则不会渲染它,但是它将保留在内存中。有什么不同?

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

ant*_*ont 5

好吧,不同之处在于,当您移除场景中的对象时,它会从场景中移除,即不再存在于那里的孩子之中。而当它只是设置为不可见时,它仍然保留在场景数据结构中,并且可以用于计算,例如向它旋转一些其他对象。

但是是的,渲染最终没有区别,两者都是从绘图中省略该对象的方法。

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

为了真正释放内存,您需要从场景中删除对象,但也要处理它正在使用的数据,例如在three.js中释放内存