所以我有一个叫做'transform'的Matrix4(),已经对其进行了一些操作。我可以链接多个旋转和平移,看来效果不错。但是,然后我想最后应用一次旋转,只是无法使其正常工作。我正在使用以下代码。 (A),(B)和(C)处的位置值相同。为什么不进行轮换?我尝试在各种x,y,z轴上旋转。我不确定代码中是否有错误或期望不正确。
编辑:我真正追求的是平移/旋转点的最终x,y,z是什么。我以为那将来自setFromMatrixPosition,但也许还有其他东西吗?
EDIT2:尝试过:
let position = new THREE.Vector3();
position.applyMatrix4(transform)
这没有得到我期望的旋转效果。
这是基本代码(我正在使用Typescript)
// Get the position from the current transform matrix.
let position = new THREE.Vector3();
position.setFromMatrixPosition(transform); <===== A
// Create a matrix to do rotation of -90 degrees on the z axis.
let rotateTransform = new THREE.Matrix4();
rotateTransform.makeRotationFromEuler(new THREE.Euler(0, 0, MyHelper.ConvertToRadian(-90)));
// Apply the rotation
transform.multiply(rotateTransform);
// Get the position again. Should be different result to above
position.setFromMatrixPosition(transform); <===== B
// Try a different approach
let transform3 = new THREE.Matrix4();
let quat2 = new THREE.Quaternion();
quat2.setFromEuler(new THREE.Euler(MyHelper.ConvertToRadian(-90),0 , 0));
transform3.compose(new THREE.Vector3(0,0,0), quat2, new THREE.Vector3(0,0,0));
transform.multiply(transform3);
absPos.setFromMatrixPosition(transform); <====== C
答案 0 :(得分:0)
position.setFromMatrixPosition(transform)
只会将矩阵的位置元素复制到position
变量中。您需要做的是将矩阵乘以向量,以完成完整的平移/旋转。