2

我还使用 mtl 文件从 obj 文件加载模型。如何从 r55 中返回的 Object3D 中正确处理或取消分配所有几何体/材质/纹理?

4

3 回答 3

5

尝试这个:

object.traverse( function ( child ) {

    if ( child.geometry !== undefined ) {

        child.geometry.dispose();
        child.material.dispose();

    }

} );
于 2013-02-01T17:47:53.500 回答
1

感谢mrdoob 的示例,我创建了一个递归处理 three.js 对象的函数。我将它添加到我个人的three.js util 库中:https ://github.com/MarcoSulla/my3

function dispose3(obj) {
    /**
     *  @author Marco Sulla (marcosullaroma@gmail.com)
     *  @date Mar 12, 2016
     */

    "use strict";

    var children = obj.children;
    var child;

    if (children) {
        for (var i=0; i<children.length; i+=1) {
            child = children[i];

            dispose3(child);
        }
    }

    var geometry = obj.geometry;
    var material = obj.material;

    if (geometry) {
        geometry.dispose();
    }

    if (material) {
        var texture = material.map;

        if (texture) {
            texture.dispose();
        }

        material.dispose();
    }
},

我希望这个函数将被添加到三个.js 代码中,在Scene.remove方法中(可能只有当你设置一个可选标志时才调用)。

于 2016-03-12T08:07:40.193 回答
0

我用这个:

function removeReferences(removeme){
  try{
    removeme.traverse(function(ob){
      try{
        renderer.deallocateObject(ob);
      }catch(e){} 
      try{
        ob.geometry.deallocate();
      }catch(e){}
      try{
        ob.material.deallocate();
      }catch(e){} 
      try{
        ob.deallocate()
      }catch(e){}
    });
  }catch(e){}
}
于 2013-02-02T14:18:52.123 回答