从对象复制THREE.js矩阵

时间:2016-03-28 12:14:03

标签: javascript matrix three.js

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

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

结果如下:

  

T ... E.Matrix4 {elements:Float32Array [16]}   要素:Float32Array [16] 0:11:02:03:04:05:16:07:08:09:0 10: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中的

UPDATE: ... newMat.copy(...)..工作正常!

1 个答案:

答案 0 :(得分:0)

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);