Aplikacja może pobierać informacje o głębi za pomocą ARCore dla Jetpack XR, aby określać, jak blisko urządzenia znajdują się obiekty fizyczne.
Tworzenie sesji ARCore w Jetpack XR
Uzyskiwanie informacji o głębi za pomocą ARCore dla Jetpack XR
Session. Jeśli ulepszasz przestrzenny interfejs za pomocą Jetpack Compose na potrzeby XR, uzyskaj dostęp do sesji z Jetpack Compose na potrzeby XR. Jeśli pracujesz z obiektami 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 wartość DepthEstimationMode:
val newConfig = session.config.copy( depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Dostępne są te wartości parametru DepthEstimationMode:
DISABLED: brak informacji o głębi sceny.RAW_ONLY: Szacowanie głębi jest włączone z wartościami surowej głębi i poziomu ufności.SMOOTH_ONLY: Szacowanie głębi jest włączone z wygładzoną głębią i wartościami ufności.SMOOTH_AND_RAW: Szacowanie głębi jest włączone zarówno w przypadku surowych, jak i wygładzonych wartości głębi oraz wartości ufności.
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 na obrazie z kamery. Z kolei wygładzone mapy głębi zawierają szacunkową głębię dla każdego piksela, ale dane głębi dla poszczególnych pikseli mogą być mniej dokładne ze względu na wygładzanie i interpolację szacunkowych wartości głębi.
android.permission.SCENE_UNDERSTANDING_FINE
Pobieranie danych o głębi
Aby uzyskać dane o głębi dla danego aparatu, użyj DepthMap:
val depthMap = DepthMap.left(session) ?: return
Różne urządzenia mają różne możliwości. Urządzenia z konfiguracją kamery stereo zwracają niepuste mapy głębi dla kamer left i right.
Podobnie urządzenia z jednym aparatem zwracają niepustą mapę głębi za pomocą interfejsu mono.
Obliczanie wartości głębokości
Z wygenerowanej mapy głębi możesz uzyskać wartości głębi i poziomu ufności:
val depthMap = DepthMap.left(session) ?: return
W zależności od użytego ustawienia konfiguracji uzyskaj dostęp do odpowiedniej mapy głębi za pomocą funkcji smoothDepthMap lub rawDepthMap. Pomiary na tych mapach są wyrażone w metrach. Do wartości ufności możesz też uzyskać dostęp za pomocą zmiennych smoothConfidenceMap i rawConfidenceMap. Wartości te mieszczą się w zakresie od 0 do 255, przy czym 255 oznacza najwyższą ufność.
Aby wyrenderować mapę głębi na potrzeby debugowania lub wizualizacji, zapoznaj się z sekcją dotyczącą głębi w aplikacji testowej ARCore.