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 }
平面具有下列屬性:
label
:指定Plane
的語意說明。可以是Wall
、Floor
、Ceiling
或Table
。centerPose
:偵測平面中心的姿勢。extents
:偵測到的平面尺寸,單位為公尺。vertices
:大致等同於平面的凸多邊形頂點清單。
對平面執行命中測試
命中測試是一種方法,可計算光線與工作階段追蹤的物件交集。命中測試的常見應用方式是指向資料表,並在該位置放置物件。執行命中測試會產生命中物件清單。換句話說,命中測試不會在第一個命中物件時停止。不過,您通常只會對特定類型的首個命中物件感興趣。
如要執行命中測試,請搭配 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 }