gpt4 book ai didi

javascript - 每次刷新页面时,对象都会加载到不同的位置 - Three.js - OBJMTLloader

转载 作者:行者123 更新时间:2023-12-03 12:39:10 25 4
gpt4 key购买 nike

我在场景中加载一些对象:

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 事件回调。

OBJMTLLoaderload: function ( url, mtlurl, onLoad, onProgress, onError )

您可以使用正确的索引传递onLoad

关于javascript - 每次刷新页面时,对象都会加载到不同的位置 - Three.js - OBJMTLloader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23590577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com