Tu app puede recuperar información de profundidad a través de ARCore para Jetpack XR para determinar qué tan cerca están los objetos físicos del dispositivo.
Crea una sesión de ARCore para Jetpack XR
Obtén información de profundidad a través de una ARCore para Jetpack XR
Session. Si mejoras la IU espacial con Jetpack Compose
para XR, accede a una sesión desde Jetpack Compose para XR. Si trabajas
con entidades espacializadas de la biblioteca de Jetpack SceneCore, accede a una
sesión desde Jetpack XR Runtime.
Configura la sesión
La recuperación del mapa de profundidad no está habilitada de forma predeterminada en las sesiones de realidad extendida. Para habilitar la recuperación del mapa de profundidad, configura la sesión y establece un
DepthEstimationMode:
val newConfig = session.config.copy( depthEstimation = DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Están disponibles los siguientes valores de DepthEstimationMode:
DISABLED: No se proporciona información sobre la profundidad de la escena.RAW_ONLY: La estimación de profundidad está habilitada con valores de profundidad y confianza sin procesar.SMOOTH_ONLY: La estimación de profundidad está habilitada con valores de profundidad y confianza suavizados.SMOOTH_AND_RAW: La estimación de profundidad está habilitada con valores de profundidad y confianza sin procesar y suavizados.
Los mapas de profundidad sin procesar proporcionan estimaciones de profundidad con mayor precisión, pero es posible que las imágenes de profundidad sin procesar no incluyan estimaciones de profundidad para todos los píxeles de la imagen de la cámara. Por el contrario, los mapas de profundidad suavizados proporcionan una profundidad estimada para cada píxel, pero los datos de profundidad por píxel pueden ser menos precisos debido al suavizado y la interpolación de las estimaciones de profundidad.
Verifica las capacidades del mapa de profundidad
Los diferentes dispositivos tienen diferentes capacidades. Los dispositivos con una configuración de cámara estéreo pueden proporcionar mapas de estimación de profundidad para las cámaras izquierda y derecha. Del mismo modo, los dispositivos con una cámara singular solo pueden proporcionar mapas de estimación de profundidad para la cámara mono.
Para verificar qué mapas de profundidad admite el dispositivo, usa XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Recupera datos de profundidad
Para obtener datos de profundidad de una cámara determinada, usa DepthMap:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Calcula los valores de profundidad
Puedes obtener valores de profundidad y confianza del mapa de profundidad resultante:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Según el parámetro de configuración que se use, accede al mapa de profundidad correspondiente con smoothDepthMap o rawDepthMap. Las mediciones contenidas en estos mapas se expresan en metros. También puedes acceder a los valores de confianza con smoothConfidenceMap y rawConfidenceMap. Estos valores varían de 0 a 255, donde 255 representa la confianza más alta.
Para renderizar un mapa de profundidad con fines de depuración o visualización, consulta la parte de profundidad de la app de prueba de ARCore.