加载具有相同功能的多个对象

Loading multiple objects with the same function

我必须加载几个模型并希望能够从加载器外部访问它们。当我尝试遵循 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 not an instance of THREE.Object3D. undefined

你并不是 return你认为自己来自 loadObject 的样子。 loader.load 的第三个参数是回调;它可能是异步调用的。 load 本身没有 return 任何东西,这就是 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

请记住,对于带回调的异步方法,“2”下的代码可以“1”下的代码之前执行。