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

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

Créer une session ARCore pour Jetpack XR

Accédez aux informations sur le plan via une session ARCore pour Jetpack XR. Consultez la section Comprendre le cycle de vie d'une session pour obtenir un Session.

Configurer la session

La détection de plan n'est pas activée par défaut dans les sessions XR. Pour activer le suivi des avions, configurez la session:

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

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. S'abonner à des plans dans une session informe votre application 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 les objets suivis par la session. Une application courante d'un test de positionnement consiste à pointer sur un tableau 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 collision ne s'arrête pas au premier objet touché. Toutefois, vous ne serez souvent intéressé que par le premier objet touché d'un type donné.

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