从对象复制THRE.js矩阵

copy THREE.js matrix from object

本文关键字:js 矩阵 THRE 复制 对象      更新时间:2023-09-26

我需要在Three.js中多次使用相同的矩阵。我有一个Object3D,在执行此操作时,我将正确的矩阵放在console.log中:

  console.log (scene.getObjectByName( "Pointer" ).matrix)

结果是:

T…E.Matrix4{elements:Float32Array[16]}elements:Float32Array[16]0:11:02:03:04:05:16:07:08:09:00:11 1:0 12:-150 13:0 14:0 15:1

请注意,第12个元素的值为-150(在obj.translationX(-150)之后)

      var newMat = new THREE.Matrix4();
      console.log(scene.getObjectByName("Pointer").matrix.elements)
      // output: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
      newMat = newMat.copy(scene.getObjectByName("Pointer").matrix);
      console.log(newMat);
      // output:elements: Float32Array[16] 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1

返回一个恒等矩阵(意味着第12个元素是:0)

这里怎么了?

更新:在renderloop内部。。。newMat.copy(…)..工作正常!

three.js在根据对象的位置、比例和旋转来渲染页面时,会更新对象矩阵。因此,当你设置对象矩阵时,它会很快被重写。若要手动设置对象矩阵,必须将autoupdate设置为false。

object.matrixAutoUpdate = false;

然后使用您的代码。

  var newMat = new THREE.Matrix4();
  console.log(scene.getObjectByName("Pointer").matrix.elements)
  // output: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
  newMat = newMat.copy(scene.getObjectByName("Pointer").matrix);
  console.log(newMat);