Wykrywanie płaszczyzn za pomocą ARCore w Jetpack XR

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć treści na te urządzenia XR.
Gogle XR
Przewodowe okulary XR

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:

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
}