所以基本上我有一个组 Object3D 的子 object3D,而子对象的 [x,y,z] 坐标相对于父对象的对象空间显示,我想更改子对象在 3D 空间内的位置. 所以首先我得到子对象相对于世界空间的位置。
var wrld_pos = childobject.matrixWorld.multiplyVector3(new THREE.Vector3);
这将返回孩子在世界空间中的位置的三元素向量。现在我想自己定位。所以我创建了一个三元素向量。
var new_pos = THREE.Vector3();
new_pos.x = 1;
new_pos.y = 2;
new_pos.z = 3;
childobject.matrixWorld.setPosition(new_pos);
提供 setPosition 的函数定义,它本质上将对象世界矩阵的最后三个元素设置为作为参数传递的向量的值,从而改变对象在世界空间中的位置。为了确保矩阵在这些更改后更新,我调用了以下函数。
childobject.matrixWorldNeedsUpdate = true;
childobject.updateMatrixWorld();
现在在检查对象的新世界矩阵时,我注意到 setPosition 函数什么也没做,什么都没有。
为什么?如果需要真实的代码示例,我会提供。但是上面应该非常准确地代表了我使用的应用程序域和语法。