WLT+ASA:配套软件概述
IBinder
- 将 SpacePin 绑定到 Azure 空间定位点
IBinder
接口位于中心,在此处由 SpacePinBinder 类实现。 SpacePinBinder 是 Unity Monobehaviour,可通过 Unity 的 Inspector 或脚本进行配置。
每个 IBinder
都有命名,因此单个 IBindingOracle
可以管理多个 IBinder
的绑定。
IPublisher
- 读取空间定位点并将其写入云
IPublisher
接口处理将空间定位点发布到云,然后在以后的会话中或在其他设备上检索它们。 IPublisher
在此处通过 PublisherASA 类实现。 使用 Azure 空间定位点捕获和检索当前物理空间中的姿势数据。
发布空间定位点时,将获得云定位点 ID。 可使用此 ID 在以后的会话中或在其他设备上检索云定位点在当前坐标系中的姿势以及与其一起存储的任何属性。 系统总是会添加一个用于标识云定位点关联 SpacePin 的属性。
应当注意的是,IPublisher
和 PublisherASA 对 SpacePin 一无所知。 IPublisher
不知道也不关心将如何处理云定位点数据。 它提供了一个简化的 awaitable 接口,用于发布和检索云定位点。
Read 与 Find
如果已知云定位点的 ID,则可以通过其 ID 检索云定位点。 此方法是用于检索云定位点的最可靠方法。 方法是 Read。
不过,在一些有趣的场景中,设备不知道某个区域内云定位点的 ID,但如果可以检索云定位点,则它们的空间数据和属性将结合起来提供足够的信息以使其有用。
Find 在设备周围区域搜索云定位点,并返回能够识别的任何内容。 此过程称为粗略重定位。
IBindingOracle - 共享云定位点 ID
IBindingOracle 接口提供了一种在 SpacePin 和特定云定位点之间持久保存和共享绑定的方法。 具体来说,它保留了 space-pin-ID/cloud-anchor-ID 对和 IBinder
的名称。
Oracle 的接口非常简单。 给定一个 IBinder
,它可以对 IBinder
的绑定实现 Put 方法,也可对其实现 Get 方法。 Put 方法用于存储绑定,而 Get 方法用于检索绑定。 存储和检索机制由实现 IBindingOracle 接口的具体类的实现决定。
此示例以 SpacePinBinderFile 类的形式实现了可能最简单的 IBindingOracle。 在 Put 上,它会将 IBinder
的绑定写入文本文件。 在 Get 上,它会从文本文件(如果可用)中读取绑定并将其输入 IBinder
。
ILocalPeg - 标记物理空间中位置的 Blob
ILocalPeg 接口是设备本地定位点的抽象。 在更理想的情况下,所需的 ILocalPeg 将由 IPublisher
在内部进行管理。 但是,当设备在定位点的姿势附近创建时,设备本地定位点的工作效果要好得多。 IPublisher
只知道设备本地定位点在需要时应该放置在哪里,而不知道创建它们的最佳时间。
SpacePinASA 的确知道创建本地定位点的最佳时间是什么时候。 当 SpacePin 的操作及其姿势集结束时,SpacePinASA 会请求 IPublisher
在所需姿势处创建一个不透明的本地钉。 然后,SpacePinBinder 将 ILocalPeg 从 SpacePinASA 中拉出,并将其传递给 IPublisher
以用于创建云空间定位点。