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

Preloading Obj+Mtl Objects in Three.js

本文关键字:对象 Three js +Mtl 加载      更新时间:2023-09-26

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

我试着放一个布尔变量,当每个对象都被加载时,它会发生变化,并做一个函数来确认是否所有对象都被加载,但由于某种原因,页面崩溃了。

我有一个数组中所有的obj和mtl路径。

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

我试着把load函数放在for语句中,但是效果不好

你能帮我吗?

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 );
                    } );

OBJMTLLoader被弃用。你应该将OBJLoaderMTLLoader组合使用。

下面是一个例子

使用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);
});