循环中的Three.js Loader回调问题 - 只接收最后一个值?

时间:2015-04-05 11:13:10

标签: three.js

我需要在循环中加载模型,我想要实现的结果是第一个带有材质[0]的模型,第二个模型带有材质[1] ......

但我的结果是所有型号都有最终材料。我认为因为当函数创建网格被调用时,变量" i" 已经在最后一个值中。

我遇到了Closure in loop question,但似乎没有适用。

任何帮助?

这里是代码:

var loader = new THREE.CTMLoader();
var material = [new THREE.MeshLambertMaterial( { color: 0xffaa00 } ),
                new THREE.MeshLambertMaterial( { color: 0xffffff } )]

for (i = 0; i < material.length; i++) {

    loader.load( "models/ctm/ben.ctm", function( geometry ) {

        var mesh = new THREE.Mesh( geometry, material[i] );
        scene.add( mesh );

    }, { useWorker: true } );

}

1 个答案:

答案 0 :(得分:1)

将动作放入功能:

function addToScene (material) {
var loader = new THREE.CTMLoader();

var mesh;
loader.load( "models/ctm/ben.ctm", function( geometry ) {

        mesh = new THREE.Mesh( geometry, material );

    }, { useWorker: true } );

scene.add(mesh)
}


var material = [new THREE.MeshLambertMaterial( { color: 0xffaa00 } ),
                new THREE.MeshLambertMaterial( { color: 0xffffff } )]
for (material.length; i++) {

    addToScene (material[i]);

}