一、为什么引擎里要同时养着三套坐标
在图形引擎里,「一个点在哪儿」其实有两种完全不同的问法:
- 存储问题:这个物体的位置是
(12.5, 0.0, -3.2)。 - 意图问题:摄像机应该在角色左后方 4 米、抬高 25 度。
第一类问题用笛卡尔坐标(Cartesian Coordinates)回答。笛卡尔坐标的加减与向量内积、叉积都是线性运算,旋转、平移、缩放能塞进矩阵里一次算完,这是它成为引擎内部存储格式的根本原因。
第二类问题用极坐标(Polar Coordinates)与球坐标(Spherical Coordinates)回答。因为人描述「方向」时天然说的是「多少度、多远」,而不是「x 加零点五、y 减二」。
这两套坐标不是二选一。工程上的通行做法是:内部存储一律用笛卡尔坐标,遇到「方向 / 旋转 / 范围 / 采样」这类语义需求时临时转换,算完再转回来。
| 需求类型 | 更自然的表示 | 典型引擎落点 |
|---|---|---|
| 位置存储、变换、碰撞 | 笛卡尔 (x, y, z) | Transform、Physics |
| 摄像机朝向、角色视线 | 球坐标 (yaw, pitch) | Camera、Anima |