我需要在循环中加载模型,我想要实现的结果是第一个带有材质[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 } );
}
答案 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]);
}