我在一个函数中传递了3d模型的名称add和纹理名称,结果是3d模型在场景中渲染。所有卡住的是,我只想从场景中移除3d对象
当我使用scene.children获取对象时,它也包含了灯光和摄影机,我只想移除场景中的网格
发布于 2016-01-28 20:08:04
也许这就解决了你的问题
for (let i = scene.children.length - 1; i >= 0; i--) {
if(scene.children[i].type === "Mesh")
scene.remove(scene.children[i]);
}请注意,这是一个反向for循环。这是因为我们要从要迭代的数组中删除项,并且需要保留索引。
发布于 2016-01-28 22:46:16
仅从场景中移除三个对象并不足以将它们从内存中删除。你必须在对象的几何形状、材质和纹理上调用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);
}如果程序、几何图形和纹理的数量不稳定,则会导致性能问题和内存泄漏。
https://stackoverflow.com/questions/35060831
复制相似问题