使用适用于 Jetpack XR 的 ARCore 检测平面

适用的 XR 设备
本指南可帮助您为这些类型的 XR 设备打造体验。
XR 头戴设备
有线 XR 眼镜

Jetpack XR 的 ARCore 可以检测用户环境中的平坦表面,并提供有关这些表面的信息,例如姿势、大小和方向。这有助于您的应用找到桌面等可放置对象的表面。

访问会话

通过 ARCore for Jetpack XR Session 访问平面信息。如果您要使用 Jetpack Compose for XR 增强空间界面,请访问 Jetpack Compose for XR 会话。如果您要处理 Jetpack SceneCore 库中的空间化实体,请从 Jetpack XR 运行时访问会话

配置会话

默认情况下,XR 会话不会启用平面检测。如需启用平面跟踪,请配置会话并设置 PlaneTrackingMode.HORIZONTAL_AND_VERTICAL 模式:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

检索感知到的平面的状态

Jetpack XR 的 ARCore 通过发出平面状态的 StateFlow 提供平面的状态。订阅会话中的平面后,当平面被添加、更新或移除时,您的应用会收到通知。

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

平面具有以下属性:

针对平面执行命中测试

命中测试是一种计算光线与会话跟踪的对象相交的方法。点击测试的一个常见应用是,指向某个桌面并在该位置放置一个对象。执行点击测试会生成一个命中对象列表。换句话说,命中测试不会在命中第一个对象时停止。不过,您可能通常只对特定类型的第一个对象命中感兴趣。

如需执行点击测试,请使用 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
}