Three.js一个接一个地加载多个obj文件

时间:2016-10-12 08:23:46

标签: javascript three.js

我正在使用three.js提供的obj / mtl加载器来加载包括mtl在内的几个obj文件。 现在我需要加载多个objs。但是我需要一个接一个地加载它们。我已经使用import try_function as trf添加了“加载屏幕”。但是如何在循环中检查THREE.DefaultLoadingManager.onProgress以添加新的objs。或者我应该使用递归函数吗?

希望你能帮助我。 感谢

3 个答案:

答案 0 :(得分:3)

加载对象时会调用一个回调函数。在那里你可以触发下一个加载步骤。

var index = 0;
var files = ['file1.obj','file2.obj'];

var objLoader = new THREE.OBJLoader();

function loadNextFile() {

  if (index > files.length - 1) return;

  objLoader.load(files[index], function(object) {

    scene.add(object);

    index++;
    loadNextFile();

  });

}

loadNextFile();

此基本代码需要扩展为加载材料。

答案 1 :(得分:0)

您可以查看THREE.DefaultLoadingManager .onLoad 这应该做的工作,而不是尝试。

答案 2 :(得分:0)

@brakebein的回答帮助我找到了正确的解决方案,所以我想我应该使用对我有用的完整代码(fwiw)-感谢BRAKEBEIN! :)

// Texture and OBJ loader
let OBJfiles = ['love3','rose'];
let _MTLLoader = new THREE.MTLLoader().setPath( 'models/' );

// this function will load the next MTL and OBJ file in the queue
function loadNextMTL () {

    if (index > OBJfiles.length - 1) return;

    _MTLLoader.load( OBJfiles[index]+'.mtl', function ( materials ) {
        materials.preload();
        new THREE.OBJLoader()
            .setMaterials( materials )
            .setPath( 'models/' )
            .load( OBJfiles[index]+'.obj', function ( group ) {
                mesh = group.children[0];
                mesh.material.side = THREE.DoubleSide;
                mesh.position.y = 0.25;
                mesh.scale.set(0.02,0.02,0.02);
                markerRoot[index].add(mesh);

                index++; // incrememnt count and load the next OBJ
                loadNextMTL();

            });
            //, onProgress, onError > These can be used to keep track of the loads
        });

}

loadNextMTL (); // kick off the preloading routine