ARCore w Jetpack XR może wykrywać płaskie powierzchnie w otoczeniu użytkownika i dostarczać o nich informacje, takie jak ich położenie, rozmiar i orientacja. Może to pomóc aplikacji w znalezieniu powierzchni, np. stołów, na których można umieścić obiekty.
Tworzenie sesji ARCore w Jetpack XR
Dostęp do informacji o płaszczyznach w sesji ARCore w Jetpacku XR. Aby uzyskać Session
, przeczytaj artykuł Cykl życia sesji.
Konfigurowanie sesji
Wykrywanie płaszczyzn nie jest domyślnie włączone w sesjach XR. Aby włączyć śledzenie samolotu, skonfiguruj sesję i ustaw tryb PlaneTrackingMode.HORIZONTAL_AND_VERTICAL
:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
android.permission.SCENE_UNDERSTANDING_COARSE
Pobieranie stanu wykrytych płaszczyzn
ARCore w Jetpack XR udostępnia stan płaszczyzn za pomocą StateFlow
, który emituje stan płaszczyzn. Subskrybowanie płaszczyzn w sesji powiadamia aplikację o dodaniu, zaktualizowaniu lub usunięciu płaszczyzn.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
Płaszczyzna ma te właściwości:
label
: semantyczny opis danegoPlane
. Może to byćWALL
,FLOOR
,CEILING
lubTABLE
.centerPose
: pozycja środka wykrytej płaszczyzny.extents
: wymiary wykrytej płaszczyzny w metrach.vertices
: lista wierzchołków wielokąta wypukłego, który przybliża płaszczyznę.
Przeprowadzanie testu trafienia na płaszczyznach
Test trafienia to metoda obliczania przecięcia promienia z obiektami śledzonymi przez sesję. Częstym zastosowaniem testu trafienia jest wskazanie stołu i umieszczenie na nim obiektu. Przeprowadzenie testu trafienia powoduje wyświetlenie listy trafionych obiektów. Innymi słowy, test trafienia nie zatrzymuje się na pierwszym trafionym obiekcie. Często jednak interesuje Cię tylko pierwszy obiekt danego typu.
Aby przeprowadzić test trafienia, użyj funkcji Interaction.hitTest()
z parametrem Ray
:
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.TABLE }