Mit ARCore für Jetpack XR können ebene 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.
ARCore für Jetpack XR-Sitzung erstellen
Über eine ARCore for Jetpack XR-Sitzung auf Ebeneninformationen zugreifen Informationen zum Abrufen einer Session
finden Sie unter Lebenszyklus einer Sitzung.
Sitzung konfigurieren
Die Erkennung von Ebenen ist in XR-Sitzungen nicht standardmäßig aktiviert. So aktivieren Sie die Ebenenverfolgung: 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 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. */) }
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 bestimmtenPlane
. Kann einWALL
,FLOOR
,CEILING
oderTABLE
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 Treffertest durchführen, erhalten Sie eine Liste von Trefferobjekten. 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 }