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 determinatoPlane. Potrebbe essere unWALL,FLOOR,CEILINGoTABLE.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 }