Twoja aplikacja może pobierać informacje o głębi za pomocą ARCore dla Jetpack XR, aby określić, jak blisko urządzenia znajdują się obiekty fizyczne.
Tworzenie sesji ARCore dla Jetpack XR
Informacje o głębi uzyskasz za pomocą ARCore dla Jetpack XR
Session. Jeśli ulepszasz przestrzenny interfejs użytkownika za pomocą Jetpack Compose
dla XR, uzyskaj dostęp do sesji z Jetpack Compose dla XR. Jeśli pracujesz
z przestrzennymi elementami z biblioteki Jetpack SceneCore, uzyskaj dostęp do
sesji z Jetpack XR Runtime.
Konfigurowanie sesji
Pobieranie mapy głębi jest domyślnie wyłączone w sesjach XR. Aby włączyć pobieranie mapy głębi, skonfiguruj sesję i ustaw
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. */) }
Dostępne są te wartości DepthEstimationMode:
DISABLED: nie są podawane żadne informacje o głębi sceny.RAW_ONLY: szacowanie głębi jest włączone z wartościami głębi i pewności.SMOOTH_ONLY: szacowanie głębi jest włączone z wartościami głębi i pewności.SMOOTH_AND_RAW: szacowanie głębi jest włączone z wartościami głębi i pewności.
Mapy głębi surowej zapewniają dokładniejsze szacunki głębi, ale obrazy głębi surowej mogą nie zawierać szacunków głębi dla wszystkich pikseli na obrazie z kamery. Natomiast mapy głębi wygładzonej zawierają szacunkową głębię dla każdego piksela, ale dane głębi na piksel mogą być mniej dokładne ze względu na wygładzanie i interpolację szacunków głębi.
Sprawdzanie możliwości mapy głębi
Różne urządzenia mają różne możliwości. Urządzenia z konfiguracją kamery stereo mogą udostępniać mapy szacowania głębi dla lewej i prawej kamery. Podobnie urządzenia z pojedynczą kamerą mogą udostępniać mapy szacowania głębi tylko dla kamery mono.
Aby sprawdzić, które mapy głębi są obsługiwane przez urządzenie, użyj XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Pobieranie danych o głębi
Aby uzyskać dane o głębi dla danej kamery, użyj DepthMap:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Obliczanie wartości głębi
Wartości głębi i pewności możesz uzyskać z mapy głębi:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
W zależności od użytego ustawienia konfiguracji uzyskaj dostęp do odpowiedniej mapy głębi za pomocą smoothDepthMap lub rawDepthMap. Pomiary zawarte w tych mapach są wyrażone w metrach. Możesz też uzyskać dostęp do wartości pewności za pomocą smoothConfidenceMap i rawConfidenceMap. Te wartości mieszczą się w zakresie od 0 do 255, gdzie 255 oznacza najwyższą pewność.