使用 ARCore for Jetpack XR 偵測平面

ARCore for Jetpack XR 可偵測使用者環境中的平面,並提供相關資訊,例如姿勢、大小和方向。這可協助應用程式找到可放置物件的表面,例如桌子。

建立 ARCore for Jetpack XR 工作階段

透過 ARCore for Jetpack XR 工作階段存取平面資訊。請參閱「瞭解工作階段的生命週期」一文,瞭解如何取得 Session

設定工作階段

根據預設,XR 工作階段不會啟用平面偵測功能。如要啟用平面追蹤功能,請設定工作階段:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

擷取感知平面的狀態

ARCore for Jetpack XR 會透過發出平面狀態的 StateFlow,提供平面狀態。在工作階段中訂閱平面,可在平面新增、更新或移除時通知您的應用程式。

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

平面具有下列屬性:

對平面執行命中測試

命中測試是一種方法,可計算光線與工作階段追蹤的物件交集。命中測試的常見應用方式是指向資料表,並在該位置放置物件。執行命中測試會產生命中物件清單。換句話說,命中測試不會在第一個命中物件時停止。不過,您通常只會對特定類型的首個命中物件感興趣。

如要執行命中測試,請搭配 Ray 使用 Interaction.hitTest()

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
}