对象加载在不同的位置每次我刷新页面- Three.js - OBJMTLloader
Objects load in different position each time I refresh the page - Three.js - OBJMTLloader
我在场景中加载了一些对象:
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);
}
此外,不仅位置属性是随机改变的,而且缩放等
load
事件将按随机顺序触发。
——编辑——
我认为这个问题与counter
函数调用有关,因为它假设第一个调用来自第一个(在数组中)对象load
事件回调。
OBJMTLLoader有load: function ( url, mtlurl, onLoad, onProgress, onError )
您可以传递具有正确索引的onLoad
相关文章:
- 强制模板刷新ember.js
- 如何通过ajax刷新JSF填充的javascript变量
- 如何解决Yii中的页面刷新问题
- Jquery提交表单而不刷新
- 刷新页面后会出现警报
- 刷新后保留对网页的更改
- 如何在不刷新页面的情况下更新显示框
- 在Three.js中导出网格会提高性能吗
- 重定向时角度刷新浏览器
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- Javascript,输出结果后页面不断刷新
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 刷新父窗口后无法关闭窗口
- 刷新页面时hasClass不起作用
- X秒后刷新select元素
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 触发媒体查询断点时刷新页面
- 如何刷新列表框内容onclick或blur事件
- 如何在three.js上添加两个向量
- 对象加载在不同的位置每次我刷新页面- Three.js - OBJMTLloader