You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何彻底替换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:20:53