基本上,我有一个在Object3D组中的子对象3D,虽然子对象的[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函数什么也没做,完全没有作用。
为什么?如果需要真实的代码示例,我可以提供。但是以上内容应该非常准确地代表了我使用的应用程序域和语法。