Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Object3Ds填充对象文字-循环以填充网格_Javascript_Loops_Three.js_Mesh_Object Literal - Fatal编程技术网

Javascript 使用Object3Ds填充对象文字-循环以填充网格

Javascript 使用Object3Ds填充对象文字-循环以填充网格,javascript,loops,three.js,mesh,object-literal,Javascript,Loops,Three.js,Mesh,Object Literal,我试图用三个.jsObject3Ds填充一个对象文字,然后用网格填充Object3Ds。然而,我从我的代码中得到了一些奇怪的结果。我已经将这个问题提炼为仍然复制这个问题的最简单的代码行。在下面的场景中,thing1和thing2不接收网格,thing3接收所有三个网格: var objSet = { thing1: new THREE.Object3D(), thing2: new THREE.Object3D(), thing3: new THREE.Object3D(

我试图用三个.js
Object3D
s填充一个对象文字,然后用网格填充
Object3D
s。然而,我从我的代码中得到了一些奇怪的结果。我已经将这个问题提炼为仍然复制这个问题的最简单的代码行。在下面的场景中,thing1和thing2不接收网格,thing3接收所有三个网格:

var objSet = {
    thing1: new THREE.Object3D(),
    thing2: new THREE.Object3D(),
    thing3: new THREE.Object3D()
};

for (key in objSet) {
    objSet[key].add(aMesh);
    objSet[key].add(anotherMesh);
    objSet[key].add(yetAnotherMesh);
};

我的最终目标是动态创建一个对象文字,填充
Object3D
s,然后可靠地循环并向每个对象添加网格。问题出在哪里?谢谢你看

按照上面评论中的指导,我发现我的代码中出现奇怪行为的原因(console.logs表明,在运行期间,对象文本中的每个
Object3D
都被网格填充,但最后一个
Object3D
都是空的)网格只能使用一次,我需要将它们复制到
Object3Ds
,否则它们只是在我指定它们时从一个跳到下一个。哎

修复非常简单快捷-只需在
.add()
函数中将
.clone()
添加到网格变量的末尾:

var objSet = {
    thing1: new THREE.Object3D(),
    thing2: new THREE.Object3D(),
    thing3: new THREE.Object3D()
};

for (key in objSet) {
    objSet[key].add(aMesh.clone());
    objSet[key].add(anotherMesh.clone());
    objSet[key].add(yetAnotherMesh.clone());
};

谢谢大家

@SirBraneDamuj-我简化了我之前的问题,并将其转发到这里。感谢您的反馈。这是因为在
for…in
循环的最后一次迭代中,
键是
thing3
,因此您将所有三个网格添加到
对象集.thing3
。看起来您想要显式地设置
objSet.thing1.add(aMesh);对象集内容2.添加(anotherMesh)。或者,您应该创建一个对象数组和一个网格数组,然后根据它们的索引进行匹配。@FelixKling-谢谢您的回答。这可能是非常基本的,但为什么不在循环运行的过程中向
thing1
thing2
添加网格呢?@FelixKling-这是一个玩具示例;在最终的程序(动画)中将有几百个这样的任务,因此明确的任务是不存在的。两个阵列是可行的,但有点麻烦。猜猜我为什么不能将
Object3D
s和网格成功地保存在同一个对象文本中?哦,你真的想将所有三个网格添加到每个元素吗?我不太了解three.js,但我想一个网格只能属于一个对象。因此,如果将网格添加到
thing3
,它们将从
thing2
中删除。如果要将每个网格添加到每个对象,可能必须创建网格的副本。