首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在three.js中从场景中移除所有网格对象?

如何在three.js中从场景中移除所有网格对象?
EN

Stack Overflow用户
提问于 2016-01-28 19:55:36
回答 2查看 3.7K关注 0票数 3

我在一个函数中传递了3d模型的名称add和纹理名称,结果是3d模型在场景中渲染。所有卡住的是,我只想从场景中移除3d对象

当我使用scene.children获取对象时,它也包含了灯光和摄影机,我只想移除场景中的网格

EN

回答 2

Stack Overflow用户

发布于 2016-01-28 20:08:04

也许这就解决了你的问题

代码语言:javascript
复制
for (let i = scene.children.length - 1; i >= 0; i--) {
    if(scene.children[i].type === "Mesh")
        scene.remove(scene.children[i]);
}

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

票数 5
EN

Stack Overflow用户

发布于 2016-01-28 22:46:16

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

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

在调用dispose和remove方法之后,执行如下诊断(其中this.renderer是您的THREE.Renderer):

代码语言:javascript
复制
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);
}

如果程序、几何图形和纹理的数量不稳定,则会导致性能问题和内存泄漏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35060831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档