在Three.js中改变子对象的世界位置

时间:2014-06-26 22:26:51

标签: javascript 3d three.js

在Three.js中是否有办法改变子对象的世界位置?

我的最终目标是:

1)将孩子从父母那里分离出来(没有改变他的位置)
2)将父母移动到不同的位置
3)重新连接孩子(没有改变位置)

在我的代码中,'child'实际上是一组对象(我希望将每个对象保持在同一个世界位置)

目前,我已通过以下方式取得1和2:

scene.updateMatrixWorld();
var vector = new THREE.Vector3();
vector.setFromMatrixPosition( child.matrixWorld );
grandParent.remove( parent );
scene.add( parent );
parent.children[0].position = vector;

我试图通过存储matrixWorld并将其更新为存储值来反转上述过程,但是不成功。我知道改变矩阵世界是不明智的,但这是唯一已经证明富有成效的方法。

1 个答案:

答案 0 :(得分:2)

是的,您可以将孩子与父母分离,转换父母,然后重新安置孩子。

有一些工具可以帮助您实现这一目标:

// remove child from parent and add it to scene
THREE.SceneUtils.detach( child, parent, scene );

// remove child from scene and add it to parent
THREE.SceneUtils.attach( child, scene, parent );

three.js r.67