ARCore para Jetpack XR puede detectar superficies planas en el entorno del usuario y proporcionar información sobre ellas, como su posición, tamaño y orientación. Esto puede ayudar a tu app a encontrar plataformas, como tablas, para colocar objetos.
Crea una sesión de ARCore para Jetpack XR
Acceder a la información del plano a través de una sesión de ARCore para Jetpack XR Consulta Comprende el ciclo de vida de una sesión para obtener un Session
.
Configura la sesión
La detección de planos no está habilitada de forma predeterminada en las sesiones de XR. Para habilitar el seguimiento de planos, configura la sesión:
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! */) }
Cómo recuperar el estado de los planos percibidos
ARCore para Jetpack XR proporciona el estado de los planos a través de un StateFlow
que emite el estado de los planos. Si te suscribes a planes en una sesión, se notificará a tu app cuando se agreguen, se actualicen o se quiten planes.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
Un plano tiene las siguientes propiedades:
label
: Es una descripción semántica de unPlane
determinado. Puede ser unWall
,Floor
,Ceiling
oTable
.centerPose
: Es la posición del centro del plano detectado.extents
: Son las dimensiones del plano detectado, en metros.vertices
: Es una lista de vértices de un polígono convexo que se aproxima al plano.
Realiza una prueba de posicionamiento en planos
Una prueba de posicionamiento es un método para calcular la intersección de un rayo con los objetos a los que hace un seguimiento la sesión. Una aplicación común de una prueba de posicionamiento es apuntar a una tabla y colocar un objeto en esa ubicación. Realizar una prueba de posicionamiento genera una lista de objetos de hit. En otras palabras, una prueba de hit no se detiene en el primer golpe del objeto. Sin embargo, a menudo, es posible que solo te interese el primer objeto que se encuentra de un tipo determinado.
Para realizar una prueba de posicionamiento, usa 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 }