O app pode recuperar informações de profundidade pelo ARCore para Jetpack XR para determinar a distância entre objetos físicos e o dispositivo.
Criar uma sessão do ARCore para Jetpack XR
Receba informações de profundidade por uma do ARCore para Jetpack XR
Session. Se você estiver aprimorando a interface espacial usando o Jetpack Compose
para XR, acesse uma sessão do Jetpack Compose para XR. Se você estiver trabalhando
com entidades espacializadas da biblioteca Jetpack SceneCore, acesse uma
sessão do Jetpack XR Runtime.
Configurar a sessão
A recuperação do mapa de profundidade não está ativada por padrão nas sessões XR. Para ativar a recuperação do mapa de profundidade, configure a sessão e defina um
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. */) }
Os seguintes valores de DepthEstimationMode estão disponíveis:
DISABLED: nenhuma informação sobre a profundidade da cena é fornecida.RAW_ONLY: a estimativa de profundidade é ativada com valores brutos de profundidade e confiança.SMOOTH_ONLY: a estimativa de profundidade é ativada com valores suaves de profundidade e confiança.SMOOTH_AND_RAW: a estimativa de profundidade é ativada com valores brutos e suaves de profundidade e confiança.
Os mapas de profundidade brutos fornecem estimativas de profundidade com maior precisão, mas as imagens de profundidade bruta podem não incluir estimativas de profundidade para todos os pixels na imagem da câmera. Em contraste, os mapas de profundidade suaves fornecem profundidade estimada para cada pixel, mas os dados de profundidade por pixel podem ser menos precisos devido à suavização e interpolação das estimativas de profundidade.
Verificar os recursos do mapa de profundidade
Dispositivos diferentes têm recursos diferentes. Dispositivos com uma configuração de câmera estéreo podem fornecer mapas de estimativa de profundidade para as câmeras esquerda e direita. Da mesma forma, dispositivos com uma câmera singular só podem fornecer mapas de estimativa de profundidade para a câmera mono.
Para verificar quais mapas de profundidade são compatíveis com o dispositivo, use XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Recuperar dados de profundidade
Para receber dados de profundidade de uma determinada câmera, use DepthMap:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Calcular valores de profundidade
É possível receber valores de profundidade e confiança do mapa de profundidade resultante:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Dependendo da configuração usada, acesse o mapa de profundidade correspondente usando smoothDepthMap ou rawDepthMap. As medições contidas nesses mapas são expressas em metros. Também é possível acessar os valores de confiança usando smoothConfidenceMap e rawConfidenceMap. Esses valores variam de 0 a 255, em que 255 representa a maior confiança.