繁体   English   中英

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

[英]Preloading Obj+Mtl Objects in Three.js

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

我尝试放置一个布尔变量,该变量会在加载每个obj时更改,并执行一个函数来确认是否所有对象都已加载,但由于某些原因页面崩溃而无法正常工作。

我在数组中有所有的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 );

                    } );

OBJMTLLoaderdepricated 您应该结合使用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);

});

在three.js r71中测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM