您的应用可以通过 ARCore for Jetpack XR 检索深度信息,以确定实体对象与设备的距离。
创建 ARCore for Jetpack XR 会话
通过 ARCore for Jetpack XR Session 获取深度信息。如果您要使用 Jetpack Compose for XR 增强空间界面,请从 Jetpack Compose for XR 访问会话。如果您使用的是 Jetpack SceneCore 库中的空间化实体,请从 Jetpack XR 运行时访问会话。
配置会话
默认情况下,XR 会话中未启用深度图检索功能。如需启用深度图检索,请配置会话并设置 DepthEstimationMode:
val newConfig = Config.Builder(session.config) .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
DepthEstimationMode 的以下值可用:
DISABLED:未提供有关场景深度的信息。RAW_ONLY:深度估测功能已启用,并提供原始深度和置信度值。SMOOTH_ONLY:深度估测功能已启用,并提供平滑深度和置信度值。SMOOTH_AND_RAW:深度估测功能已启用,同时提供原始和经过平滑处理的深度和置信度值。
原始深度图可提供更准确的深度估算值,但原始深度图片可能不包含相机图片中所有像素的深度估算值。相比之下,平滑深度图可提供每个像素的估计深度,但由于深度估计值的平滑和插值,每个像素的深度数据可能不太准确。
检查深度图功能
不同设备的功能各不相同。采用立体摄像头配置的设备可以为左右摄像头提供深度估计图。同样,具有单个摄像头的设备只能为单色摄像头提供深度估计图。
如需查看设备支持哪些深度图,请使用 XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
检索深度数据
如需获取给定相机的深度数据,请使用 Depth:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
计算深度值
您可以从生成的深度图中获取深度值和置信度值:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
根据所使用的配置设置,使用 smoothDepthMap 或 rawDepthMap 访问相应的深度图。这些地图中包含的测量值以米为单位。您还可以使用 smoothConfidenceMap 和 rawConfidenceMap 访问置信度值。这些值的范围为 0 到 255,其中 255 表示置信度最高。
如需出于调试或可视化目的渲染深度图,请参阅 ARCore 测试应用的深度部分。