Javascript 如何存储加载的网格?

Javascript 如何存储加载的网格?,javascript,three.js,Javascript,Three.js,嗨,我一直在尝试存储从obj文件加载的对象。基本上,我正在尝试创建新的mesh并将其存储在mesh变量中,以便稍后在Javascript中引用该对象并更改其属性。但是,当我声明此网格变量并指定子网格时,加载结束后,该子网格将消失,而我的网格中没有任何内容。有没有办法从加载的网格创建新网格并存储它们?谢谢 var mesh = new THREE.Mesh(); //loading the model var loader = new THREE.OBJLoader(manager); load

嗨,我一直在尝试存储从obj文件加载的对象。基本上,我正在尝试创建新的mesh并将其存储在mesh变量中,以便稍后在Javascript中引用该对象并更改其属性。但是,当我声明此网格变量并指定子网格时,加载结束后,该子网格将消失,而我的网格中没有任何内容。有没有办法从加载的网格创建新网格并存储它们?谢谢

var mesh = new THREE.Mesh();
//loading the model
var loader = new THREE.OBJLoader(manager);

loader.load('models/stuff2.obj', function(object){
    //adding object into the scene
    object.name = "trying";
    object.traverse(function(child){
        if(child instanceof THREE.Mesh){
        child.material.map = texture;

    }
    });
    object.position.set(0,0,0);
    scene.add(mesh);
});

console.log(mesh);

您正在加载网格,因此不需要将网格声明为网格。您只需将其用作加载对象的容器

var mesh;
//loading the model
var loader = new THREE.OBJLoader(manager);

loader.load('models/stuff2.obj', function(object){
    //adding object into the scene
    object.name = "trying";
    object.traverse(function(child){
        if(child instanceof THREE.Mesh){
          child.material.map = texture;
        }
    });
    object.position.set(0,0,0);
    scene.add(object);
    mesh = object;
});
// then use it later
$("#my3dworldcontrol").click(function(){
    console.log(mesh);
});
在函数内部

var myMeshes = [];
var myMeshHash = {};
function loadMyModel(path, func){
  var loader = new THREE.OBJLoader(path);
  loader.load(path, function(object){
      object.name = "path";
      object.traverse(function(child){
          if(child instanceof THREE.Mesh){
          child.material.map = texture;

      }
      });
      object.position.set(0,0,0);
      scene.add(object);
      myMeshes.push(object);
      myMeshHash[path] = object;
      if(func != undefined){
        func(object);
      }
  });
}


//use:
loadMyModel("models/stuff2.obj", function(mesh){
  console.log(mesh);
});

你试过了吗?我试过了,但网格中没有包含与object相同的奇怪信息,除非所有这些都在for循环或其他迭代器中运行,然后就会出现闭包问题。在这种情况下,没有足够的代码来尝试它。如果你想把答案作为单元测试的解决方案,那么你应该发布一篇文章。还有人过来编辑了我答案中的重要信息。字面上的代码注释“//then use it later”意味着您不能在那里使用该控制台日志,因为obj加载是异步的。在这种情况下,它将返回undefined.woops,抱歉。这些评论实际上并没有出现在我正在编辑的评论中,尽管修订页面上说我删除了这些评论。我只是添加了缩进和分号,没有删除任何内容。@radio Ok谢谢!是否有一种方法可以设置在加载后运行命令?不知道下面的答案是否适用于您是否可以接受。