如何使用来自用户输入的three.js在场景中加载两个或更多.obj对象?

时间:2016-03-08 09:40:33

标签: javascript three.js

如何在.jj文件的三个j中加载两个以上的对象。我尝试在obj和mtl的加载器文件中应用for循环,但是它没有工作而只显示最后一个对象?如果有人可以提供帮助。

function init() {   
    container = document.createElement( 'div' );
    document.body.appendChild( container );

    camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
    camera.position.z = 1000;

    // scene
    scene = new THREE.Scene();

    var ambient = new THREE.AmbientLight( 0x444444 );
    scene.add( ambient );

    var directionalLight = new THREE.DirectionalLight( 0xffeedd );
    directionalLight.position.set( 0, 0, 1 ).normalize();
    scene.add( directionalLight );

    // model
    THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );

    var setBaseUrl1 = 'newObj/';
    var setPath1 = 'newObj/';
    var i = 0;
    var mltLoad1,objLoad1;

    var mtlLoader = new Array(res.length); 
    var objLoader = new Array(res.length); 

    for(i=0;i<res.length;i++)
    {
        mtlLoad1 = String(res[i].concat(".mtl"));
        objLoad1 = String(res[i].concat(".obj"));       

        mtlLoader[i] = new THREE.MTLLoader();
        mtlLoader[i].setBaseUrl( setBaseUrl1 );
        mtlLoader[i].setPath( String(setPath1) );
        mtlLoader[i].load( mtlLoad1, function( materials ) {

            materials.preload();

            objLoader[i] = new THREE.OBJLoader();
            objLoader[i].setMaterials( materials );
            objLoader[i].setPath( setPath1 );
            objLoader[i].load( objLoad1, function(object) {

                object.position.y = -95;
                object.position.z = 500;
                camera.position.x = 500;
                scene.add( object );
            });
        });
    }
}

1 个答案:

答案 0 :(得分:0)

加载模型没有for循环,看起来你的变量保持obj覆盖。