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 superficies, como mesas, para colocar objetos.
Crea una sesión de ARCore para Jetpack XR
Accede 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 y establece el modo PlaneTrackingMode.HORIZONTAL_AND_VERTICAL
:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
Recupera 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. Cuando te suscribes a los planos en una sesión, se notifica a tu app cuando se agregan, actualizan o quitan planos.
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 serWALL
,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 que se rastrean en la sesión. Una aplicación común de una prueba de posicionamiento es apuntar a una mesa y colocar un objeto en esa ubicación. La realización de una prueba de posicionamiento genera una lista de objetos alcanzados. En otras palabras, una prueba de impacto no se detiene en el primer objeto con el que se impacta. Sin embargo, a menudo, solo te interesará el primer objeto alcanzado 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 }