Javascript 如何存储加载的网格?
嗨,我一直在尝试存储从obj文件加载的对象。基本上,我正在尝试创建新的mesh并将其存储在mesh变量中,以便稍后在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
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谢谢!是否有一种方法可以设置在加载后运行命令?不知道下面的答案是否适用于您是否可以接受。