我必须加载一些模型,并希望能够从加载器外部访问它们。当我尝试遵循DRY规则时,我想创建一个用于加载和返回对象的函数。
function loadObject(obj, mtl) {
var loader = new THREE.OBJMTLLoader();
return loader.load( obj, mtl, function ( object ) {
return object;
});
}
但在主要功能中使用后
var box = loadObject('box.obj', 'box.mtl');
scene.add(box);
我明白了:
THREE.Object3D.add:object不是THREE.Object3D的实例。 未定义
答案 0 :(得分:0)
你不是return
loadObject
你认为的来自loader.load
的人。 load
的第三个参数是回调;它可能是异步调用的。 box
本身不返回任何内容,这就是undefined
最终成为loadObject
的原因。您可能应该将负载完成时发生的事情传递到function loadObject(obj, mtl, onSuccess) {
var loader = new THREE.OBJMTLLoader();
loader.load(obj, mtl, onSuccess);
}
var box = loadObject('box.obj', 'box.mtl', function(box) {
// 1
scene.add(box);
});
// 2
more code
:
{{1}}
请记住,对于带回调的异步方法,“2”下面的代码可以在“1”下的代码之前执行。