我在函数中传递了3d模型添加和纹理名称的名称 结果是3d模型在场景中渲染。 所有被困的是,我只想从场景中删除三维物体
当我使用scene.children获取它包含光和相机的对象时 我只想删除场景中的网格
答案 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);
}
如果程序,几何和纹理的数量不稳定,则会引发性能问题和内存泄漏。