Skip to content

关于空间计算定位的坐标系变化说明

TIP

空间计算能力,可以帮助用户关联虚拟内容和现实空间,成功定位后,虚拟世界的坐标会重新对齐到现实世界坐标,因此会有一次世界坐标的跳变。

基础 6Dof 的坐标

空间计算中,CameraRig 都需要一个父节点

以图 1 为例,要给 CameraRig 创建一个空的 BodyRig,且初始化其坐标为 0

以图 2 为例,使用 XRMan 的时候,XRMan 是 Head 的父节点,这里的 Head 相当于 CameraRig

对 6Dof 来说,CameraRig 或者 Head 的跟踪,也就是其相对坐标的变化是连续的。我们称之为 6Dof 坐标系。

定位后坐标系

定位成功后,父节点会有一个 Pose,这种情况下,CameraRig 或者 Head 的本地坐标仍然是连续的,但其世界坐标是跳变的。

跳变后的坐标系与目标现实世界的建图时坐标系是相同的。我们称之为世界坐标系。

虚拟物体

因为初始化的时候,相机所处坐标系是 6DOf 坐标系,与 Unity Editor 模式下坐标系是可以视作相同的坐标系,因此我们在 Editor 模式摆放在相机正前方的物体,运行后仍然在正前方。

但在世界坐标系中,我们在 Editor 模式下摆放的虚拟物体,必须以 Mesh/点云作为参照进行摆放虚拟物品,原 UnityEditor 模式下的坐标系不再具有参考意义。

应用运行时,定位成功后的坐标系,也应当以 Mesh/点云作为参考坐标系。

UI

对于没有空间计算的场景,UI 可以是屏幕空间的,也可以是世界空间的。因为用户的活动空间不会偏离很远。

对于空间计算的场景,因为存在坐标系的变换,因此 UI 建议与相机进行绑定

方式一:

将 Canvas 设置为 WorldSpace(图 3),同时将其作为 CameraRig/Head 的子物体(图 4),这样 UI 将伴随相机视角一起运动,达到贴屏显示的效果。

方式二:

将 Canvas 同样设置为 WorldSpace(图 3),为 Canvas 绑定一个脚本 BillboradFrontCamera(脚本有拼写错误),指定面向的相机,指定距离相机的距离(图 5)