我正在尝试制作骨骼,然后变换每个骨骼的顶点,但是我无法弄清楚需要使用哪种语法。例如,我尝试过:

var v = new THREE.Vector3(0,0,0);
var b = new THREE.Bone();
b.position.x = 5;
b.position.y = 5;
b.position.z = 5;
b.updateMatrix();
v.applyMatrix4(b.matrixWorld);
console.log(v);


期望向量v的新坐标为(5,5,5),但是console.log输出为(0,0,0)。有什么我想念的吗?

最佳答案

参见THREE.Object3D
updateMatrix()更新局部变换(Object3D.matrix),但是updateMatrixWorld()更新对象及其子对象(Object3D.matrixObject3D.matrixWorld)的全局变换。

这意味着您必须使用Object3D.matrix属性:

b.updateMatrix();
v.applyMatrix4(b.matrix);


否则您必须updateMatrixWorld()

b.updateMatrixWorld();
v.applyMatrix4(b.matrixWorld);

07-27 23:52