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 の example のおかげで、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();
    }
},

この関数が three.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 に答える