使用锚点

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

为什么要使用锚点?

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

锚点可确保对象在空间中看起来保持不变,并保持在现实世界中的虚拟对象的幻觉。

锚点的工作原理

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

  • 世界空间

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

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

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

您向此锚点附加了一个或多个对象。锚点和连接到它的对象看起来会停留在它们在真实世界中的位置。由于锚点姿势在每个帧中适应世界空间更新,因此锚点也会相应地更新对象姿态。

您可以将多个对象附加到同一个锚点,以确保即使在锚点的姿态调整的情况下,这些对象仍能保持它们的相对位置和方向。

在场景中使用锚点

如需在场景中使用锚点,您的代码应满足以下条件:

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

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

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

选择锚点上下文

使用可跟踪对象或 ARCore 会话将锚点添加到您的场景中。

当对象需要 将锚点连接到
与“可跟踪对象”显示“焊接”,并且与旋转对象具有相同的旋转效果。
这包括:
  • 似乎粘在平面上
  • 保持相对于可跟踪对象的位置,例如漂浮在可跟踪对象的上方或前方
可跟踪
在整个用户体验过程中,保持姿势不变 ARCore 会话

锚定一个或多个对象

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

  • 彼此
  • 可跟踪对象,例如平面
  • 在世界空间中的某个位置

锚定指南

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

附加到附近定位点的对象在 AR 体验期间看起来似乎以真实方式相对于彼此的位置。

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

尽可能重复使用锚点

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

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

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

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

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

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

让对象靠近锚点

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

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

分离未使用的锚点

分离您不再需要的所有锚点,以便提升应用的性能。

您的应用会为每个可跟踪对象支付 CPU 费用,并且 ARCore 无法发布已附加锚点的可跟踪对象。

锚点类型

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

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

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

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