我正在尝试制作骨骼,然后变换每个骨骼的顶点,但是我无法弄清楚需要使用哪种语法。例如,我尝试过:
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.matrix
和Object3D.matrixWorld
)的全局变换。
这意味着您必须使用Object3D.matrix
属性:
b.updateMatrix();
v.applyMatrix4(b.matrix);
否则您必须
updateMatrixWorld()
:b.updateMatrixWorld();
v.applyMatrix4(b.matrixWorld);