【发布时间】:2014-05-11 08:32:46
【问题描述】:
我在场景中加载了一些对象:
var objectInfo = [
{"objURL":"3D/Barrel/barrel.obj", "mtlURL":"3D/Barrel/barrel.mtl","xPOS":0,"yPOS":-2,"zPOS":-260,"xROT":0,"yROT":0,"zROT":0,"scaleX":0.6,"scaleY":0.6,"scaleZ":0.6},
{"objURL":"3D/Sofa/sofa.obj", "mtlURL":"3D/Sofa/sofa.mtl","xPOS":0,"yPOS":0,"zPOS":0,"xROT":0,"yROT":4,"zROT":0,"scaleX":1,"scaleY":1,"scaleZ":1},
{"objURL":"3D/Lamp/lamp.obj", "mtlURL":"3D/Lamp/lamp.mtl","xPOS":210,"yPOS":-20,"zPOS":10,"xROT":0,"yROT":50,"zROT":0,"scaleX":1,"scaleY":1,"scaleZ":1},
];
for (var i = 0; i < objectInfo.length; i++) {
loader=new THREE.OBJMTLLoader();
loader.addEventListener('load', function (event) { //callback f. to load .obj and .mtl
obj = event.content;
var c=count(); //just an external counter because i is not defined in here
obj.position.set(objectInfo[c].xPOS,objectInfo[c].yPOS,objectInfo[c].zPOS);
obj.rotation.x=objectInfo[c].xROT;
obj.rotation.y=objectInfo[c].yROT;
obj.rotation.z=objectInfo[c].zROT;
obj.scale.set(objectInfo[c].scaleX, objectInfo[c].scaleY, objectInfo[c].scaleZ);
scene.add(obj);
OBJS[c]=obj;
});
loader.load(objectInfo[i].objURL,objectInfo[i].mtlURL);
}
但是当我在没有更改任何内容的情况下硬刷新页面(F5、Chrome)时,对象的位置与以前不同。当我再次按下 F5 时,这些物体都在原来的位置。并且这种情况一直发生,并且对象的位置是随机的。
有什么问题? 请回答,因为我在发布之前做了很多研究。
编辑:没有 counter() 的替代实现:(仍然不起作用)
for (var i = 0; i < objectInfo.length; i++) {
loader=new THREE.OBJMTLLoader();
loader.addEventListener('load', function (event) { //callbac f. to load .obj and .mtl
obj = event.content;
var objectInfo2=objectInfo.pop();
obj.position.set(objectInfo2.xPOS,objectInfo2.yPOS,objectInfo2.zPOS);
obj.rotation.x=objectInfo2.xROT;
obj.rotation.y=objectInfo2.yROT;
obj.rotation.z=objectInfo2.zROT;
obj.scale.set(objectInfo2.scaleX, objectInfo2.scaleY, objectInfo2.scaleZ);
scene.add(obj);
// OBJS[c]=obj;
});
loader.load(objectInfo[i].objURL,objectInfo[i].mtlURL);
}
另外,不仅位置属性是随机变化的,而且比例等也是随机变化的。
【问题讨论】:
-
物体灯和桶的位置似乎是随机互换的。我也尝试使用 pop() 而不是计数器从 objectInfo[] 中提取数据,但同样的问题。
标签: javascript object three.js loader