我需要在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(...)..工作正常!
答案 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);