# 坐标系与位姿约定

定位成功后，01Spatial 返回相机在地图坐标系中的位姿。正确理解矩阵方向和相机轴，是避免内容镜像、旋转或固定偏移的关键。

## 变换命名

使用 `T_A_B` 表示“把 B 坐标中的点变换到 A 坐标”。

- `M`：地图坐标系。
- `A`：当前 AR Session 坐标系。
- `C`：相机坐标系。
- `T_M_C`：相机到地图的变换，也就是 API 的 `camera_to_world`。

`matrix_column_major` 是完整的 4 × 4 列主序矩阵。Three.js 的 `Matrix4.fromArray()` 可以直接读取，不要再次转置。

## 相机轴

API 位姿采用计算机视觉相机轴：

| 轴 | 方向 |
| --- | --- |
| `+X` | 向右 |
| `+Y` | 向下 |
| `+Z` | 向前 |

WebXR / OpenGL 风格相机通常是 `+X` 向右、`+Y` 向上、`-Z` 向前，因此使用：

```text
D_cv_to_graphics = diag(1, -1, -1, 1)
```

## 对齐地图内容

拍摄查询图片时保存同一帧的 AR 相机到 Session 变换 `T_A_C_graphics`。图片没有旋转时：

```text
T_A_M = T_A_C_graphics × D_cv_to_graphics × inverse(T_M_C)
```

把 `T_A_M` 应用到地图内容的共同根节点，不要覆盖 AR 相机。若物体在地图中的变换为 `T_M_O`：

```text
T_A_O = T_A_M × T_M_O
```

上传图片发生旋转时，还必须加入同一图片旋转的逆变换；只交换宽高或调整内参不够。Rig.v2 返回的位姿可能属于任一上传帧，必须使用 `poses[0].image` 对应帧保存的 AR 变换。

地图经过真实尺度配置时，平移单位为米。不要假设不同地图共享同一个向上轴；以各地图保存的 Origin 为准。
