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, takich jak stoły, na których można umieścić obiekty.
Dostęp do sesji
Dostęp do informacji o płaszczyźnie za pomocą ARCore w Jetpack XR Session. Jeśli ulepszasz przestrzenny interfejs za pomocą Jetpack Compose na XR, uzyskaj dostęp do sesji z Jetpack Compose na XR. Jeśli pracujesz z obiektami przestrzennymi z biblioteki Jetpack SceneCore, uzyskaj dostęp do sesji z Jetpack XR Runtime.
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 SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
android.permission.SCENE_UNDERSTANDING_COARSE
Pobieranie stanu wykrytych płaszczyzn
ARCore w Jetpacku 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: opis semantyczny danegoPlane. Może to byćWALL,FLOOR,CEILINGlubTABLE.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 wskazywanie stołu i umieszczanie 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 }