适用于 Jetpack XR 的 ARCore 可以检测用户环境中的平面,并提供有关这些平面的信息,例如姿势、大小和方向。这有助于您的应用找到桌子等表面来放置对象。
创建适用于 Jetpack XR 的 ARCore 会话
通过 ARCore for Jetpack XR 会话访问平面信息。请参阅了解会话的生命周期,以获取 Session
。
检索感知平面的状态
ARCore for Jetpack XR 通过发射平面状态的 StateFlow
提供平面状态。在会话中订阅航线后,系统会在添加、更新或移除航线时通知您的应用。
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
平面具有以下属性:
label
:给定Plane
的语义说明。可以是Wall
、Floor
、Ceiling
或Table
。centerPose
:检测到的平面中心的姿势。extents
:检测到的平面的尺寸(以米为单位)。vertices
:近似于平面的凸多边形的顶点列表。
对平面执行点击测试
点击测试是一种计算光线与会话跟踪的对象的交点的方法。点击测试的常见应用是指向桌子并在该位置放置对象。执行点击测试会产生一个点击对象列表。换句话说,碰撞测试不会在命中第一个对象时停止。不过,您通常可能只对命中的第一个对象感兴趣。
如需执行点击测试,请将 Interaction.hitTest()
与 Ray
搭配使用:
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.Table }