如何彻底替换Three.js对象/网格的变换矩阵?最佳实践
创建对象
创建一个Three.js网格对象:
var geometry = new THREE.BufferGeometry(); var standardMaterial = new THREE.MeshStandardMaterial( {/* 输入参数 */ } ); var mesh = new THREE.Mesh( geometry, standardMaterial ); // 随后将该网格添加至3D场景中。
设置变换矩阵
尝试为对象设置变换矩阵的代码如下:
object = ... // 对象已创建并可调用 const pkm = ... // 包含16个数值,对应一个4x4矩阵 var matrix = new THREE.Matrix4(); matrix.set( pkm.X00, pkm.X01, pkm.X02, pkm.X03, pkm.X10, pkm.X11, pkm.X12, pkm.X13, pkm.X20, pkm.X21, pkm.X22, pkm.X23, pkm.X30, pkm.X31, pkm.X32, pkm.X33, ); object.applyMatrix4( matrix ); object.updateMatrixWorld( true );
问题描述
上述方式仅会将新矩阵与对象原有矩阵相乘,无法完全替换原有矩阵。需要找到一种彻底替换对象/网格旧变换矩阵的稳健最佳实践。
尝试过的方案
我们测试了多种方案,但均未达到预期效果,这些方案包括:
object.matrix = matrix; object.matrixAutoUpdate = false; object.updateMatrixWorld(true);
object.matrix.setFromMatrix4(matrix); object.matrixWorldNeedsUpdate = true;
object.matrix.copy(matrix); object.matrixWorldNeedsUpdate = true;
object.matrix.identity(); object.matrix.copy(newMatrix); object.updateMatrixWorld(true);
object.matrix.set(pkm.X00, pkm.X01, ... ) object.matrixAutoUpdate = false; object.updateMatrixWorld(true);
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

