Ebenen mit ARCore für Jetpack XR erkennen

Anwendbare XR‑Geräte
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für diese Arten von XR-Geräten zu entwickeln.
XR-Headsets
XR-Datenbrille mit Kabel

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

Auf eine Sitzung zugreifen

Über ein ARCore für Jetpack XR-Session auf Ebeneninformationen zugreifen. Wenn Sie räumliche Benutzeroberflächen mit Jetpack Compose für XR verbessern, greifen Sie auf eine Sitzung von Jetpack Compose für XR zu. Wenn Sie mit räumlich angeordneten Einheiten aus der Jetpack SceneCore-Bibliothek arbeiten, greifen Sie über die Jetpack XR-Laufzeit auf eine Sitzung zu.

Sitzung konfigurieren

Die Erkennung von Ebenen ist in XR-Sitzungen nicht standardmäßig aktiviert. Um die Ebenenverfolgung zu aktivieren, konfigurieren Sie die Sitzung und legen Sie den Modus PlaneTrackingMode.HORIZONTAL_AND_VERTICAL fest:

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. */)
}

Status der erkannten Ebenen abrufen

ARCore für Jetpack XR stellt den Status von Ebenen über einen StateFlow bereit, der den Status von Ebenen ausgibt. Wenn Sie Ebenen in einer Sitzung abonnieren, wird Ihre App benachrichtigt, wenn Ebenen 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 eines bestimmten Plane. Kann ein WALL, FLOOR, CEILING oder TABLE sein.
  • centerPose: Die Position des Mittelpunkts der erkannten Ebene.
  • extents: Die Abmessungen der erkannten Ebene in Metern.
  • vertices: Eine Liste von Eckpunkten eines konvexen Polygons, das die Ebene annähert.

Treffertest für Ebenen durchführen

Ein Treffertest ist eine Methode zum Berechnen der Schnittmenge eines Strahls mit Objekten, die von der Sitzung verfolgt werden. Ein häufiger Anwendungsfall für einen Treffertest ist, auf einen Tisch zu zeigen und ein Objekt an dieser Stelle zu platzieren. Wenn Sie einen Hit-Test durchführen, erhalten Sie eine Liste von Hit-Objekten. Mit anderen Worten: Ein Treffertest wird nicht beim ersten getroffenen Objekt beendet. Oft sind Sie jedoch nur am ersten getroffenen Objekt 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
}