應用程式可透過 ARCore for Jetpack XR 擷取深度資訊,判斷實體物體與裝置的距離。
建立 Jetpack XR 的 ARCore 工作階段
透過 Jetpack XR 工作階段的 ARCore 取得頭部姿勢資訊。
請參閱「瞭解工作階段的生命週期」一文,取得 Session
。
設定工作階段
延展實境工作階段預設不會啟用深度地圖擷取功能。如要啟用深度地圖擷取功能,請設定工作階段並設定 DepthEstimationMode
:
val newConfig = session.config.copy( depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
可用的 DepthEstimationMode
值如下:
DISABLED
:未提供場景深度相關資訊。RAW_ONLY
:啟用深度估算功能,並提供原始深度和信賴度值。SMOOTH_ONLY
:啟用深度估算功能,並提供平滑深度和信賴度值。SMOOTH_AND_RAW
:啟用深度估算功能,並提供原始和平滑深度與信賴度值。
原始深度圖可提供更準確的深度估計值,但原始深度影像可能不會包含相機影像中所有像素的深度估計值。相較之下,平滑深度圖會提供每個像素的估計深度,但由於深度估計值經過平滑處理和插補,因此每個像素的深度資料可能較不準確。
擷取深度資料
如要取得特定攝影機的深度資料,請使用 DepthMap
:
val depthMap = DepthMap.left(session) ?: return
不同裝置的功能各異。如果裝置採用立體相機設定,系統會為 left
和 right
相機傳回非空值的深度地圖。同樣地,單一攝影機裝置會使用 mono
傳回非空值的深度地圖。
計算深度值
您可以從產生的深度地圖取得深度和信賴度值:
val depthMap = DepthMap.left(session) ?: return
視使用的設定而定,使用 smoothDepthMap
或 rawDepthMap
存取對應的深度地圖。這些地圖中的測量結果以公尺為單位。您也可以使用 smoothConfidenceMap
和 rawConfidenceMap
存取信賴度值。這些值的範圍介於 0 至 255 之間,255 代表最高信賴度。
如要為了偵錯或視覺化目的算繪深度地圖,請參閱 ARCore 測試應用程式的深度部分。