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