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

非Three.js R91版本下手动为Object3D应用四元数的方法

手动为Object3D应用四元数(Three.js无applyQuaternion版本)

在Three.js还没有applyQuaternion方法的版本里,完全不需要绕路把四元数转成欧拉角再生成矩阵——直接用四元数创建旋转矩阵就好,这样既高效又能避免欧拉角的万向锁问题。

正确的实现代码

// 假设q是你已经定义好的目标四元数
const rotationMatrix = new THREE.Matrix4();
// 直接从四元数生成旋转矩阵,跳过欧拉角转换步骤
rotationMatrix.makeRotationFromQuaternion(q);

// 将旋转矩阵应用到物体上
myObject.applyMatrix(rotationMatrix);

// 注意矩阵更新的顺序:先更新本地矩阵,再强制更新世界矩阵
myObject.updateMatrix();
// 传入true确保递归更新所有父物体的世界矩阵,避免层级显示异常
myObject.updateMatrixWorld(true);

你原有代码的问题分析

  1. 多余的欧拉角转换:把四元数转成欧拉角再生成矩阵的过程,会因为欧拉角的特性(比如万向锁)丢失部分旋转信息,导致最终的旋转结果不符合预期。
  2. 矩阵更新顺序错误:你先调用了updateMatrixWorld()再调用updateMatrix(),这会导致世界矩阵没有用上最新的本地矩阵更新,所以看起来没有效果。

内容的提问来源于stack exchange,提问作者user2132190

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:02:11