Object3D
Object3D是three.js场景物体的基类
| 类名 | 继承自 | 是否可见 | 核心用途 |
|---|---|---|---|
| Group | Object3D | ❌ 否 | 逻辑分组,统筹管理多个物体 |
| Mesh | Object3D | ✅ 是 | 标准 3D 模型(由面和材质组成) |
| Line | Object3D | ✅ 是 | 绘制线条、轨迹、边框 |
| Points | Object3D | ✅ 是 | 粒子系统、点云、星空 |
| Sprite | Object3D | ✅ 是 | 始终面向摄像机的 2D 图像(如血条、光晕) |
| SkinnedMesh | Mesh | ✅ 是 | 角色动画、人物模型 |
| LOD | Object3D | ❌ 否 | 根据距离自动切换模型精度 |
| Bone | Object3D | ❌ 否 | 骨骼动画的关节节点 |
父子随动
物体之间的随动 如机械臂关节的逐级带动 是Object3D之间通过children嵌套完成的 父物体的任何变换(移动、旋转、缩放)都会自动、完整地传递给所有子物体。子物体会跟随父物体一起运动,同时保持自己在父物体坐标系中的相对位置和姿态
注意 子物体的所有变换属性(position, rotation, scale)都变成了相对于其父物体的局部坐标 于是会出现万向锁
四元数
万向锁是欧拉角的数学特性,解决万向锁需要使用四元数描述物体运动。每个 Object3D 都有一个 .quaternion 属性1
2
3
4
5
6// 1. 创建一个四元数,表示“绕 Y 轴旋转 90 度”
const q = new THREE.Quaternion();
q.setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI / 2);
// 2. 将这个旋转应用到物体的当前四元数上
mesh.quaternion.multiply(q);