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.
Crea una sessione ARCore per Jetpack XR
Accedere alle informazioni sul piano tramite una sessione ARCore per Jetpack XR. Consulta la sezione
Comprendere il ciclo di vita di una sessione per ottenere un Session
.
Configurare la sessione
Il rilevamento del piano non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il monitoraggio
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 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. */) }
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 determinatoPlane
. Potrebbe essere unWALL
,FLOOR
,CEILING
oTABLE
.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 hit produce un elenco di oggetti hit. In altre parole, un test di hit non si ferma al primo oggetto colpito. Tuttavia, spesso potresti essere interessato solo al primo oggetto di un determinato tipo.
Per eseguire un test di riscontro, 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 }