【发布时间】:2016-01-28 11:55:36
【问题描述】:
我在函数中传递 3d 模型添加的名称和纹理名称 结果是在场景中渲染了 3d 模型。 所有卡住的是,我只想从场景中删除 3d 对象
当我使用 scene.children 获取对象时,它也包含光线和相机 我只想删除场景中的网格
【问题讨论】:
标签: javascript 3d three.js scene
我在函数中传递 3d 模型添加的名称和纹理名称 结果是在场景中渲染了 3d 模型。 所有卡住的是,我只想从场景中删除 3d 对象
当我使用 scene.children 获取对象时,它也包含光线和相机 我只想删除场景中的网格
【问题讨论】:
标签: javascript 3d three.js scene
也许这能解决你的问题,
for (let i = scene.children.length - 1; i >= 0; i--) {
if(scene.children[i].type === "Mesh")
scene.remove(scene.children[i]);
}
请注意,这是一个反向 for 循环。这是因为我们正在从正在迭代的数组中删除项目,并且我们需要保留索引。
【讨论】:
仅从场景中删除三个对象不足以将它们从内存中删除。您必须对对象的几何形状、材质和纹理调用 dispose() 方法。
https://github.com/mrdoob/three.js/issues/5175
调用 dispose 和 remove 方法后,进行如下诊断(其中 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);
}
如果程序、几何图形和纹理的数量不稳定,则会引发性能问题和内存泄漏。
【讨论】: