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 pozycji głowy w sesji ARCore w Jetpacku XR.
Aby uzyskać Session
, przeczytaj artykuł Omówienie cyklu życia sesji.
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 = 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 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ą funkcji
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.