如何在three.js中更新组中每个子级的位置
我有一个组,当我拖放该组时,只有如何在three.js中更新组中每个子级的位置,three.js,Three.js,我有一个组,当我拖放该组时,只有组。位置正在更改。它的子对象的位置仍然是初始值。拖放后,它们不会改变。我将如何更新每个孩子的新位置 group=new THREE.Group(); group.add(mesh1);`enter code here` group.add(mesh2); group.add(mesh3); 翻译前假设 组位置: 位置:3.Vector3 x:0 y:0 z:0 group.children[0]。位置 x:-160.73611832689494 y:56.067
组。位置正在更改。它的子对象的位置仍然是初始值。拖放后,它们不会改变。我将如何更新每个孩子的新位置
group=new THREE.Group();
group.add(mesh1);`enter code here`
group.add(mesh2);
group.add(mesh3);
翻译前假设
组位置
:
位置:3.Vector3
x:0
y:0
z:0
group.children[0]。位置
x:-160.73611832689494
y:56.06755614280701
z:87.78444211930037
group.children[1].位置
x:-29.66267697047422
y:54.55312106758356
z:14.629093836992979
拖放后:
group.position
位置:3.Vector3
x:-74.16755189596836
y:0
z:-0.6893904394708485
group.children[0]。位置
x:-160.73611832689494
y:56.06755614280701
z:87.78444211930037
group.children[1].位置
x:-29.66267697047422
y:54.55312106758356
z:14.629093836992979
请给我一个建议。。
如何更新矩阵并获得儿童的新值?首先-在最新的THREE.JS修订版(r71)中不再有三个.Group。但是,您可以使用THREE.Object3D
对对象进行分组:
var group=new THREE.Object3D();
group.add(box);
group.add(sphere);
scene.add(group);
接下来,由于要对组进行平移,因此对象的局部位置(在该组内)不会更改。如果需要获取子对象的全局位置,可以
这样做:
var vector = new THREE.Vector3();
vector.setFromMatrixPosition( box.matrixWorld );
或者更简单:
box.matrixWorld.getPosition();
在plnkr中,组子位置位于局部空间,这意味着相对于父组。你知道getWorldPosition()
吗?不知道。你知道任何解释世界坐标和局部坐标以及如何更新它们的教程吗?谢谢@SET。我理解你的例子。但我需要做的是。在翻译后从组中移除框,并且仍然保留它的新位置。console.log(group.position、box.position、vector);组。移除(盒子);场景。添加(框);当我这样做的时候,这个盒子会回到它原来的位置。我想把它保持在这个链接@SET]@JerrinaPaul中的翻译位置chek script.js,用sphere.position.copy(vector)取消注释行代码>你能在这个程序中检查这个链接吗?我试图通过点击某个对象并将其拖动到其他位置来选择某个对象。第一次它会起作用。如果我点击某个已经移动到其他位置的对象,它将返回到它的原始位置。我无法理解如何操作更新世界坐标以解决我的问题@SET@JerrinaPaul - . 不管怎样-你的问题在于凌乱的代码,而不是更新位置或父/子操作。