Rilevare i piani utilizzando ARCore per Jetpack XR

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Visori XR
Occhiali XR con cavo

ARCore per Jetpack XR può rilevare superfici piane nell'ambiente dell'utente e fornire informazioni su di esse, come posa, dimensioni e orientamento. In questo modo l'app può trovare superfici come tavoli su cui posizionare gli oggetti.

Accedere a una sessione

Accedi alle informazioni sul piano tramite un Session ARCore per Jetpack XR. Se stai migliorando la UI spaziale utilizzando Jetpack Compose per XR, accedi a una sessione di Jetpack Compose per XR. Se utilizzi entità spazializzate della libreria Jetpack SceneCore, accedi a una sessione da Jetpack XR Runtime.

Configura la sessione

Il rilevamento dei piani non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il tracciamento dell'aereo, configura la sessione e imposta la modalità 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. */)
}

Recupera lo stato dei piani percepiti

ARCore per Jetpack XR fornisce lo stato dei piani tramite un StateFlow che emette lo stato dei piani. L'iscrizione agli aerei in una sessione invia una notifica alla tua app quando gli aerei vengono aggiunti, aggiornati o rimossi.

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

Un piano ha le seguenti proprietà:

  • label: una descrizione semantica di un determinato Plane. Potrebbe essere un WALL, FLOOR, CEILING o TABLE.
  • centerPose: la posa del centro del piano rilevato.
  • extents: le dimensioni del piano rilevato, in metri.
  • vertices: un elenco di vertici di un poligono convesso che approssima il piano.

Eseguire un test di collisione con gli aerei

Un test di hit è un metodo per calcolare l'intersezione di un raggio con gli oggetti monitorati dalla sessione. Un'applicazione comune di un test di hit è puntare a una tabella e posizionare un oggetto in quella posizione. L'esecuzione di un test di rilevamento genera un elenco di oggetti rilevati. In altre parole, un test di hit non si ferma al primo oggetto colpito. Tuttavia, spesso potresti essere interessato solo al primo risultato di un determinato tipo.

Per eseguire un test di hit, utilizza Interaction.hitTest() con un 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
}