Rilevare i piani utilizzando ARCore per Jetpack XR

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

Creare una sessione ARCore per Jetpack XR

Accedi alle informazioni sull'aereo tramite una sessione ARCore per Jetpack XR. Consulta la sezione Comprendere il ciclo di vita di una sessione per ottenere un Session.

Configura la sessione

Il rilevamento del piano non è abilitato per impostazione predefinita nelle sessioni XR. Per attivare il monitoraggio degli aerei, configura la sessione:

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

Recupera lo stato degli aerei percepiti

ARCore per Jetpack XR fornisce lo stato degli aerei tramite un StateFlow che emette lo stato degli aerei. L'iscrizione ai piani in una sessione consente di inviare notifiche all'app quando i piani 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. Può essere 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.

Esegui un test di hit contro 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 corrispondenza genera un elenco di oggetti corrispondenti. In altre parole, un test di hit non si ferma al primo oggetto colpito. Tuttavia, spesso potrebbe interessarti solo il primo oggetto colpito di un determinato tipo.

Per eseguire un test di corrispondenza, 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
}