繁体   English   中英

如何从three.js中删除场景中的所有Mesh对象?

[英]how to remove all Mesh objects from the scene in three.js?

我在函数中传递了3d模型添加和纹理名称的名称,结果是在场景中渲染了3d模型。 所有被困的是,我只想从场景中删除三维物体

当我使用scene.children获取它包含光和相机的对象时,我只想删除场景中的网格物体

也许这解决了你的问题,

for (let i = scene.children.length - 1; i >= 0; i--) {
    if(scene.children[i].type === "Mesh")
        scene.remove(scene.children[i]);
}

请注意,它是一个反向循环。 这是因为我们正在从我们正在迭代的数组中删除项目,我们需要保留索引。

仅从场景中删除三个对象不足以从内存中删除它们。 您必须在对象的几何,材质和纹理上调用dispose()方法。

https://github.com/mrdoob/three.js/issues/5175

在调用dispose并删除方法后,执行这样的诊断(this.renderer是你的THREE.Renderer):

if (this.renderer && (this.renderer.info.memory.geometries || this.renderer.info.memory.programs || this.renderer.info.memory.textures)) {
    loge("geometries=" + this.renderer.info.memory.geometries + " programs=" + this.renderer.info.memory.programs + " textures=" + this.renderer.info.memory.textures);
}

如果程序,几何和纹理的数量不稳定,则会引发性能问题和内存泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM