Détecter des plans à l'aide d'ARCore pour Jetpack XR

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

ARCore pour Jetpack XR peut détecter les surfaces planes dans l'environnement de l'utilisateur et fournir des informations à leur sujet, telles que leur pose, leur taille et leur orientation. Cela peut aider votre application à trouver des surfaces comme des tables sur lesquelles placer des objets.

Accéder à une session

Accédez aux informations sur les plans via un Session ARCore pour Jetpack XR. Si vous améliorez l'UI spatiale à l'aide de Jetpack Compose for XR, accédez à une session depuis Jetpack Compose for XR. Si vous travaillez avec des entités spatialisées de la bibliothèque Jetpack SceneCore, accédez à une session à partir de Jetpack XR Runtime.

Configurer la session

La détection de plans n'est pas activée par défaut dans les sessions XR. Pour activer le suivi des plans, configurez la session et définissez le mode 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. */)
}

Récupérer l'état des plans perçus

ARCore pour Jetpack XR fournit l'état des plans via un StateFlow qui émet l'état des plans. L'abonnement aux plans d'une session permet à votre application d'être avertie lorsque des plans sont ajoutés, mis à jour ou supprimés.

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

Un plan possède les propriétés suivantes :

Effectuer un test de positionnement sur des plans

Un test de positionnement est une méthode permettant de calculer l'intersection d'un rayon avec des objets suivis par la session. Une application courante d'un test de positionnement consiste à pointer sur une table et à placer un objet à cet emplacement. Un test de positionnement génère une liste d'objets touchés. En d'autres termes, un test de sélection ne s'arrête pas au premier objet touché. Toutefois, vous ne serez peut-être intéressé que par le premier objet touché d'un type donné.

Pour effectuer un test de positionnement, utilisez Interaction.hitTest() avec 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
}