在Three.js中预加载Obj + Mtl对象

时间:2015-07-16 14:37:33

标签: javascript three.js

我需要使用Three.js预加载一些obj + mtl文件(它不是同一个文件),并且我需要在加载所有对象时调用另一个函数。

我尝试放置一个布尔变量,该变量在每个obj加载时都会发生变化,并且执行一个函数来确认所有对象是否已经加载但是由于某种原因它没有工作,因为页面崩溃了。

我在数组中有所有obj和mtl路径。

这是我正在做的事情的一个例子。 http://pastie.org/10297027

我尝试将load函数放在for语句中,但它没有运行

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

new THREE.MTLLoader()
                    .setPath( 'models/obj/male02/' )
                    .load( 'male02_dds.mtl', function ( materials ) {

                        materials.preload();

                        new THREE.OBJLoader()
                            .setMaterials( materials )
                            .setPath( 'models/obj/male02/' )
                            .load( 'male02.obj', function ( object ) {

                                object.position.y = - 95;
                                scene.add( object );

                            }, onProgress, onError );

                    } );

OBJMTLLoaderdepricated。您应该结合使用OBJLoaderMTLLoader

这是example

答案 1 :(得分:0)

使用three.js加载管理器完成此任务,以下是如何操作。

创建经理:

var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ) {
    // this gets called after an object has been loaded
};
manager.onLoad = function () {
    // everything is loaded
    // call your other function
};

使用管理器和加载项创建一个加载器:

var OBJMTLLoader = new THREE.OBJMTLLoader( manager );

OBJMTLLoader.load(urlsOBJ[0], urlsMTL[0], function(object) {

    // stuff you do in your callback
    var newObject = object.clone();
    newObject.position.set(140, 10, 10);
    newObject.rotation.x = -99;
    scene.add(newObject);
    objectArray.push(newObject);

});

在three.js r71中测试过。