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

时间:2016-01-28 11:55:36

标签: javascript 3d three.js scene

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

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

2 个答案:

答案 0 :(得分:4)

也许这可以解决你的问题,

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

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

答案 1 :(得分:1)

仅从场景中删除三个对象不足以从内存中删除它们。您必须在对象的几何,材质和纹理上调用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);
}

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

相关问题