javascript - 从对象复制 THREE.js 矩阵

标签 javascript matrix three.js

我需要在 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: 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)

这里出了什么问题?

更新:在渲染循环内... newMat.copy(...).. 工作正常!

最佳答案

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

关于javascript - 从对象复制 THREE.js 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262075/

相关文章:

python - NumPy在矩阵上的重复命令:如何在OpenCV中使用cv::Mat做到这一点?

python - 将数组提升为另一个数组的幂 - 即扩展数组的维度

three.js - 为什么我墙上的灯看起来很奇怪?三.js

javascript - 响应式设计,以图像为中心

javascript - 在IOS上用JWplayer播放F4V文件

javascript - 如何使用 raphael.js 重复绘制折线动画

three.js - 地板上的阴影在 Three.js v104 中不起作用,但在 r71 中起作用

Javascript 自定义库

matlab - 如何比较两个不同矩阵的行(一行与另一行)?

vue.js - 如何将 Three.js 导入我的 Nuxt 项目