La tua app può recuperare informazioni sulla profondità tramite ARCore per Jetpack XR per determinare la distanza degli oggetti fisici dal dispositivo.
Crea una sessione ARCore per Jetpack XR
Ottenere informazioni sulla profondità tramite ARCore per Jetpack XR
Session. Se stai migliorando la UI spaziale utilizzando Jetpack Compose
per XR, accedi a una sessione di Jetpack Compose per XR. Se utilizzi
entità spazializzate della libreria Jetpack SceneCore, accedi a
una sessione da Jetpack XR Runtime.
Configurare la sessione
Il recupero della mappa di profondità non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il recupero
della mappa di profondità, configura la sessione e imposta 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. */) }
Sono disponibili i seguenti valori di DepthEstimationMode:
DISABLED: Non vengono fornite informazioni sulla profondità della scena.RAW_ONLY: La stima della profondità è abilitata con valori di profondità e confidenza grezzi.SMOOTH_ONLY: La stima della profondità è attivata con valori di profondità e confidenza uniformi.SMOOTH_AND_RAW: La stima della profondità è abilitata con valori di profondità grezza e uniforme e di confidenza.
Le mappe di profondità grezze forniscono stime di profondità con maggiore precisione, ma le immagini di profondità grezze potrebbero non includere stime di profondità per tutti i pixel nell'immagine della videocamera. Al contrario, le mappe di profondità uniformi forniscono una profondità stimata per ogni pixel, ma i dati di profondità per pixel potrebbero essere meno precisi a causa dell'uniformità e dell'interpolazione delle stime di profondità.
Controllare le funzionalità della mappa di profondità
Dispositivi diversi hanno funzionalità diverse. I dispositivi con una configurazione della videocamera stereo possono fornire mappe di stima della profondità per le videocamere sinistra e destra. Allo stesso modo, i dispositivi con una sola videocamera possono fornire mappe di stima della profondità solo per la videocamera monocromatica.
Per controllare quali mappe di profondità sono supportate dal dispositivo, utilizza
XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Recuperare i dati di profondità
Per ottenere i dati di profondità per una determinata videocamera, utilizza DepthMap:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Calcolare i valori di profondità
Puoi ottenere i valori di profondità e confidenza dalla mappa di profondità risultante:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
A seconda dell'impostazione di configurazione utilizzata, accedi alla mappa di profondità corrispondente
utilizzando smoothDepthMap o rawDepthMap. Le misurazioni contenute in queste mappe
sono espresse in metri. Puoi accedere ai valori di confidenza anche utilizzando
smoothConfidenceMap e rawConfidenceMap. Questi valori vanno da 0 a 255,
dove 255 rappresenta la massima affidabilità.
Per eseguire il rendering di una mappa di profondità a scopo di debug o visualizzazione, consulta la sezione Profondità dell'app di test ARCore.