使用锚点

使用锚点可以让虚拟对象看起来停留在 AR 场景中。

为什么要使用锚点?

随着 ARCore 的环境理解在整个 AR 体验中更新,虚拟对象看似会远离放置位置。这可能会影响应用的真实性和用户体验。

锚点可确保对象看起来在空间中保持相同位置和方向,这有助于您保持放置于现实世界中的虚拟对象的错觉。

锚点的工作原理

如果您刚开始使用锚点,回顾世界空间和姿势会很有帮助。

  • 世界空间

    • 表示相机和对象所在位置的坐标空间
    • 相机和对象位置在现实世界空间中逐帧更新
  • 姿势

    • 表示对象在现实世界空间中的位置和方向
    • 在 iOS 中也称为“转换”

创建锚点时,您可以使用一个姿势来描述相对于当前帧的世界空间估计的位置和方向。

您将一个或多个对象附加到此锚点。锚点和连接到它上的物体似乎会停留在它们放置于现实世界中的位置。当锚点姿态在每个帧中适应现实世界空间更新时,锚点都会相应地更新对象和姿态。

您可以将多个对象附加到同一锚点,以确保这些对象保持其相对位置和方向,即使锚点姿态调整也是如此。

在场景中使用锚点

如需在场景中使用锚点,您的代码应执行以下操作:

  • 在可跟踪对象(例如平面)或 ARCore 会话环境中创建锚点。
  • 将一个或多个对象附加到锚点。

锚点可以支持场景对象中不同类型的位置行为。

确定锚点上下文以及场景对象所需的锚点数量取决于您的 AR 场景所需的位置行为。如需了解详情,请参阅以下部分。

选择锚点上下文

使用可跟踪对象或 ARCore 会话向场景添加锚点。

当您想要 将锚点连接到
将“焊接”给了可追踪对象,并且受到与可追踪对象相同的旋转效果。
这包括:
  • 看起来粘在平面上
  • 保持相对于可跟踪对象的位置,例如漂浮在它上面或前面
可跟踪
在整个用户体验过程中看起来始终保持相同的姿势 ARCore 现场录像

定位一个或多个对象

您可以将一个或多个对象附加到锚点。通常,这些对象与以下一项或多项具有空间关系:

  • 彼此
  • 可跟踪对象,例如平面
  • 在现实世界中的位置

锚点定位指南

有效且高效地使用锚点可以提升应用的真实性和性能。

整个 AR 体验中,连接到附近锚点的物体似乎都是在真实环境中相对于彼此的位置。

仅使用您需要的锚点有助于降低 CPU 成本。

尽可能重复使用锚点

在大多数情况下,您应为多个附近的对象使用相同的锚点,而不是为每个对象创建一个新的锚点。

如果对象需要与可跟踪对象或现实世界中某个位置保持独特的空间关系,请为该对象使用新锚点。

请注意,如果场景中的每个对象都有自己的锚点,则这些锚点将独立调整对象姿态,以响应 ARCore 对每一帧中的世界空间的估计。单独锚定的对象可以相对于彼此移动或旋转,从而破坏虚拟对象应相对于彼此保持原位的 AR 场景。

示例
例如,假设您的应用允许用户在房间内放置虚拟家具。用户打开应用后,ARCore 便会开始以平面的形式跟踪房间内的桌面和地板。用户在桌面上放置一盏虚拟灯。然后,用户就将一把虚拟椅子放在地板上。

此时,您的场景中应该有一个锚点连接到桌面平面,另一个锚点连接到地板平面。

如果用户向桌面添加另一个虚拟台灯,您可以重复使用已连接到桌面平面的锚点。这样,两个台灯看起来都粘在桌面平面上,并保持它们之间的相对位置。椅子还保持它相对于地面平面的位置。

让物体靠近锚点

锚定对象时,请确保这些对象靠近您所使用的锚点。避免将物体放置在离锚点八米(8 米)或二十六英尺(26 英尺)的位置,以防止由于 ARCore 对世界空间坐标的更新而导致意外的旋转运动。

如果您需要将对象放置在距离现有锚点超过 8 米的范围内,请创建一个更靠近此位置的新锚点,并将对象连接到新锚点。

分离未使用的锚点

分离任何不再需要的锚点,以便提升应用的性能。

您的应用会为每个可跟踪对象产生 CPU 成本,ARCore 不会释放带有锚点的可跟踪对象。

锚点类型

锚点类型按其有效的范围区分(从本地到全球)。

  • 本地锚点与应用一起存储在本地,并且仅对该应用的实例有效。用户必须实际位于放置锚点的位置。

  • 云锚点存储在 Google Cloud 中,并且可在应用实例之间共享。用户必须实际位于放置锚点的位置。

  • 地理空间锚点基于大地纬度、经度和海拔,加上 Google 的视觉定位系统 (VPS) 数据,可提供世界上几乎任何位置的精确锚点;这些锚点可以在应用实例之间共享。只要应用已连接到互联网并且能够使用 VPS,用户就可以从远程位置放置锚点。