坐标系统在渲染引擎中扮演的角色非常重要,它保证了渲染结果与交互的准确,阅读本文档,你可以了解 Galacean 中涉及的绝大多数坐标系统,需要注意的是,不同渲染引擎中各种空间的定义是有差异的,本文仅讨论 Galacean 中的空间标准。
本文会按照空间的定义
,坐标系类型
等方面来横向比较各个坐标空间,其中坐标系类型
具体指左手坐标系
与右手坐标系
,如下图所示:
定义为左手坐标系
或右手坐标系
会影响 forward
的朝向与旋转的方向(逆时针或顺时针),对于朝向的定义可以想象着将右手与 +X
重合,头顶方向与 +Y
重合,此时面部朝向的方向就是 forward
,可以简单对比 Galacean 与 Unity 的差异:
Unity 的局部坐标与世界坐标系都是左手坐标系
,位姿变换时依据顺时针方向进行旋转,对应的 forward
方向是 +Z
,因此相机的朝向(取景方向)就是 +Z
方向
Galacean 的局部坐标与世界坐标系都是右手坐标系
,位姿变换时依据逆时针方向进行旋转,对应的 forward
方向是 -Z
,因此相机的朝向(取景方向)就是 -Z
方向
局部空间是相对的,它以物体的自身位置为参考坐标系的,因此描述的时候通常表示为:“ A 节点局部空间中的某个点”,局部空间是右手坐标系
, Transform
组件会按照以下公式自动计算各个点在世界空间中的位置。
世界空间是绝对的,根节点放置在世界空间
中,而其子节点会继承他的空间关系,与局部空间
相同,世界空间
也是右手坐标系
,当两个节点不在同一个局部空间
时,可以将它们转换至世界空间来比较相对的位置关系。
确定 gizmo 在场景中姿态
图标 | 选项 | 内容 |
---|---|---|
本地坐标 | 保持 Gizmo 相对于选中实体的旋转 | |
全局坐标 | 固定 Gizmo 与世界空间方向。即与场景中网格方向一致 |
观察空间
就是相机的局部空间,以透视相机为例:
屏幕空间的定义与前端规范保持一致,是以画布的左上角为坐标原点的二维空间坐标系,空间内的取值范围与画布的尺寸保持一致,在交互,屏幕空间转换时经常使用。
视口空间的定义与前端规范保持一致,通过设置相机的 viewport 可以控制渲染的目标区域,
渲染精灵或遮罩等 2D 元素时,默认在局部坐标系中的 XoY 平面上放置这个面片: