three.js矩阵乘法无法按预期运行

时间:2018-12-19 10:00:57

标签: three.js

所以我有一个叫做'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

1 个答案:

答案 0 :(得分:0)

position.setFromMatrixPosition(transform)只会将矩阵的位置元素复制到position变量中。您需要做的是将矩阵乘以向量,以完成完整的平移/旋转。