Ebenen mit ARCore für Jetpack XR erkennen

ARCore für Jetpack XR kann flache Oberflächen in der Umgebung des Nutzers erkennen und Informationen dazu liefern, z. B. ihre Position, Größe und Ausrichtung. So kann Ihre App Oberflächen wie Tische finden, auf denen Objekte platziert werden können.

ARCore für Jetpack XR-Sitzung erstellen

Auf Ebeneninformationen über eine ARCore für Jetpack XR-Sitzung zugreifen Weitere Informationen zum Abrufen einer Session finden Sie unter Lebenszyklus einer Sitzung.

Sitzung konfigurieren

Die Ebenenerkennung ist in XR-Sitzungen standardmäßig nicht aktiviert. So aktivieren Sie das Tracking von Flugreisen:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

Status der erkannten Flugzeuge abrufen

ARCore für Jetpack XR stellt den Status von Ebenen über eine StateFlow bereit, die den Status der Ebenen ausgibt. Wenn Sie sich für Flugzeuge in einer Sitzung anmelden, wird Ihre App benachrichtigt, wenn Flugzeuge hinzugefügt, aktualisiert oder entfernt werden.

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

Eine Ebene hat die folgenden Eigenschaften:

  • label: eine semantische Beschreibung einer bestimmten Plane. Kann Wall, Floor, Ceiling oder Table sein.
  • centerPose: Die Pose des Mittelpunkts der erkannten Ebene.
  • extents: Die Abmessungen der erkannten Ebene in Metern.
  • vertices: Eine Liste von Eckpunkten eines konvexen Polygons, das die Ebene approximiert.

Kollisionstest mit Ebenen durchführen

Ein Hit-Test ist eine Methode, mit der die Schnittmenge eines Strahls mit Objekten berechnet wird, die von der Sitzung erfasst werden. Ein gängiger Anwendungsfall für einen Treffertest ist das Anklicken einer Tabelle und das Platzieren eines Objekts an dieser Stelle. Ein Treffertest führt zu einer Liste von Trefferobjekten. Mit anderen Worten: Ein Hit-Test endet nicht beim ersten Objekttreffer. Oft sind Sie jedoch nur an dem ersten Objekttreffer eines bestimmten Typs interessiert.

Verwenden Sie zum Ausführen eines Treffertests Interaction.hitTest() mit einer 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
}