Object-literal填充了Object3Ds - 用网格填充的循环

时间:2014-03-18 23:34:33

标签: javascript loops three.js mesh object-literal

我尝试使用Three.js Object3D填充对象 - 文字,然后用网格填充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的对象文字,然后可靠地循环并为每个网格添加网格。这里的问题在哪里?谢谢参观!

1 个答案:

答案 0 :(得分:0)

在评论中的上述人员的指导下,我发现我的代码中出现奇怪行为的原因(console.logs表明对象文字中的每个Object3D都在填充网格期间运行,但最后只有最后一个Object3D是空的)是网格只能使用一次,我需要将它们复制到Object3Ds,否则他们只是从一个跳到接下来我分配给他们。喂!

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

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());
};

全部谢谢!