【问题标题】:how to remove all Mesh objects from the scene in three.js?如何在three.js中从场景中删除所有Mesh对象?
【发布时间】:2016-01-28 11:55:36
【问题描述】:

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

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

【问题讨论】:

    标签: javascript 3d three.js scene


    【解决方案1】:

    也许这能解决你的问题,

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-07
        • 2015-04-28
        • 2013-08-23
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 2020-11-12
        相关资源
        最近更新 更多