Dopo che l'utente concede l'autorizzazione per l'head tracking, la tua app può recuperare le informazioni sulla postura della testa tramite ARCore per Jetpack XR. Le informazioni sulla postura della testa possono aiutare la tua app a creare esperienze più intuitive, ad esempio una finestra che segue il campo visivo dell'utente.
Crea una sessione ARCore per Jetpack XR
Ottenere informazioni sulla postura della testa tramite una sessione ARCore per Jetpack XR.
Consulta Comprendere il ciclo di vita di una sessione per ottenere un
Session
.
Configura la sessione
Il monitoraggio della testa non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il monitoraggio
della testa, configura la sessione e imposta la modalità
HeadTrackingMode.LAST_KNOWN
:
val newConfig = session.config.copy( headTracking = Config.HeadTrackingMode.LAST_KNOWN, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Recuperare i dati sulla postura della testa
I dati sulla postura della testa vengono esposti tramite un RenderViewpoint
.
Un RenderViewpoint
descrive la posa e il campo visivo per un determinato punto di
vista di un dispositivo. Un dispositivo può avere punti di vista sinistro, destro o mono, a seconda
delle funzionalità del dispositivo.
Per ottenere i dati per il punto di vista mono:
val mono = RenderViewpoint.mono(session) ?: return mono.state.collect { state -> val fov = state.fieldOfView val viewpointPose = state.pose }
Applicazioni del tracciamento della testa
Un modo in cui la tua app potrebbe utilizzare il monitoraggio della testa è quello di mantenere le entità nel campo visivo dell'utente, per le app che richiedono agli utenti di guardare o muoversi.
Evita di utilizzare entità bloccate nel campo visivo dell'utente perché possono causare mal d'auto. Utilizza invece il movimento dell'entità che segue la testa dell'utente dopo un breve periodo:
val viewpointPose = RenderViewpoint.left(session)!!.state lifecycleScope.launch { while (true) { delay(2000) val start = panel.getPose() val startTime = session.state.value.timeMark val pose = session.scene.perceptionSpace.transformPoseTo( viewpointPose.value.pose, session.scene.activitySpace ) val target = Pose(pose.translation + pose.forward * 1f, pose.rotation) while (true) { val ratio = (session.state.value.timeMark - startTime).inWholeMilliseconds / 500f panel.setPose(Pose.lerp(start, target, ratio)) if (ratio > 1f) break } } }