我正在尝试用 Three.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
的对象文字,然后可靠地循环并为每个对象添加网格。问题出在哪里?感谢您的观看!
按照上面评论中人员的指导,我发现我的代码中奇怪行为的原因是(console.logs 指示对象文字中的每个Object3D
在运行过程中都被网格填充,但最后除了最后一个Object3D
都是空的(是网格只能使用一次,我需要将它们复制到Object3Ds
中, 否则,他们只是在我分配他们时从一个跳到另一个。哎呀!
修复快速简便 - 只需在 .add()
函数中将 .clone()
添加到 mesh 变量的末尾:
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());
};
谢谢大家!