Aplikacja może pobierać informacje o głębi za pomocą ARCore for Jetpack XR, aby określić, jak blisko urządzenia znajdują się obiekty fizyczne.
Tworzenie sesji ARCore for Jetpack XR
Uzyskiwanie informacji o głębi za pomocą ARCore for Jetpack XR Session. Jeśli ulepszasz przestrzenny interfejs użytkownika za pomocą Jetpack Compose for XR, uzyskaj dostęp do sesji z Jetpack Compose for XR. Jeśli pracujesz z elementami przestrzennymi z biblioteki Jetpack SceneCore, uzyskaj dostęp do sesji z Jetpack XR Runtime.
Konfigurowanie sesji
Pobieranie mapy głębi nie jest domyślnie włączone w sesjach XR. Aby włączyć pobieranie mapy głębi, skonfiguruj sesję i ustaw 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. */) }
Dostępne są te wartości DepthEstimationMode:
DISABLED: brak informacji o głębi sceny.RAW_ONLY: szacowanie głębi jest włączone z surowymi wartościami głębi i poziomu ufności.SMOOTH_ONLY: szacowanie głębi jest włączone z wartościami wygładzonej głębi i poziomu ufności.SMOOTH_AND_RAW: szacowanie głębi jest włączone z użyciem wartości głębi i poziomów ufności zarówno w trybie surowym, jak i wygładzonym.
Surowe mapy głębi zapewniają dokładniejsze szacunki głębi, ale surowe obrazy głębi mogą nie zawierać szacunków głębi dla wszystkich pikseli obrazu z kamery. Z kolei wygładzone mapy głębi podają szacunkową głębię dla każdego piksela, ale dane o głębi poszczególnych pikseli mogą być mniej dokładne ze względu na wygładzanie i interpolację szacunkowych wartości głębi.
Sprawdzanie możliwości mapy głębi
Różne urządzenia mają różne możliwości. Urządzenia z konfiguracją aparatu stereo mogą udostępniać mapy szacowania głębi dla lewego i prawego aparatu. Podobnie urządzenia z jednym aparatem mogą dostarczać mapy szacowania głębi tylko dla aparatu 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 Depth:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Obliczanie wartości głębi
Z uzyskanej mapy głębi możesz odczytać wartości głębi i poziomu ufności:
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 na tych mapach są wyrażone w metrach. Poziomy ufności możesz też sprawdzić za pomocą smoothConfidenceMap i rawConfidenceMap. Wartości te mieszczą się w zakresie od 0 do 255, gdzie 255 oznacza najwyższy poziom ufności.
Aby wyrenderować mapę głębi na potrzeby debugowania lub wizualizacji, zapoznaj się z sekcją dotyczącą głębi w aplikacji testowej ARCore.