点击测试会将虚拟对象放置在现实世界中

平台专用指南

Android (Kotlin/Java)

Android NDK (C)

Unity(AR 基础)

AR 内容必须正确放置和大小,才能融入场景。与现实世界中的物体一样,距离较远的虚拟物体应看起来更小。您可以执行命中测试(或在 AR Foundation for Unity 中执行光线投射),确定 3D 对象在场景中的正确位置。正确的放置可确保 AR 内容以适当的(表观)尺寸呈现。

点击测试可以找到真实的 3D 几何图形与由原点和方向组成的虚拟光线之间的交集。使用设备摄像头作为原点的射线最常用的方法是,不过 ARCore 包含一个 API,用于执行在世界空间坐标中使用任意射线的命中测试。

假设有一条光线,来源于用户设备相机,它向前延伸,直至射中场景的 3D 几何图形(例如地面、墙壁或物体)。一旦发生这种情况,您会收到命中结果列表,或与检测到的场景几何图形的交集。该列表会按设备与设备的距离进行排序,最近的交叉路口排在最前面。这一点很重要,因为通常情况下,您看不到被其他对象遮挡的对象,因此在大多数情况下,第一个结果最为重要。

命中结果的内容

系统会以列表形式返回单个命中结果,其中包含每个结果的以下信息:

  • 与射线原点的距离(以米为单位)
  • 命中结果的姿态(位置和方向)
  • 您点击的 3D 几何图形,采用可跟踪对象的形式

然后,您可以根据所需的命中结果使用锚点来真实放置 3D 内容

命中结果类型

命中结果分为四种类型:深度、平面、特征点和即时展示位置结果。每种类型都有自己的使用场景和利弊,如下表所示。

命中结果类型 说明 方向 使用场景
深度 使用来自整个场景的深度信息来确定点的正确深度和方向 与 3D 表面垂直 将虚拟对象放置在任意表面(不只是地板和墙壁)上
飞机 敲击水平和/或垂直表面,以确定点的正确深度和方向 与 3D 表面垂直 使用平面的完整几何图形将对象放置在平面(地板或墙壁)上。需要立即更正体重。深度点击测试的回退
特征点 依靠用户点按点周围的视觉特征来确定点的正确位置和方向 与 3D 表面垂直 将对象放在任意表面上(不仅限于地板和墙壁)
即时放置(永久性 Raycast) 使用屏幕空间来放置内容。最初使用应用提供的估算深度。可立即运作,但一旦 ARCore 能够确定实际场景几何图形,姿势和实际深度就会发生变化 +Y 指向上方,与重力相反 使用平面的完整几何体将对象放置在平面(地板或墙壁)上,并且快速放置至关重要,并且体验可以容忍未知的初始深度和缩放

设备兼容性

点击测试适用于所有支持 ARCore 的设备,但深度点击测试需要使用支持深度的设备

使用命中结果放置 AR 内容

获得命中结果后,您可以使用其姿势作为输入,在场景中放置 AR 内容