ARCore для Jetpack XR может обнаруживать плоские поверхности в окружении пользователя и предоставлять информацию о них, например их позу, размер и ориентацию. Это может помочь приложению находить поверхности, например столы, на которые можно размещать объекты.
Как получить доступ к сеансу
Доступ к информации о плоскостях через ARCore для Jetpack XR Session. Если вы улучшаете пространственный интерфейс с помощью Jetpack Compose для XR, получите доступ к сеансу из Jetpack Compose для XR. Если вы работаете с пространственными объектами из библиотеки Jetpack SceneCore, получите доступ к сеансу из Jetpack XR Runtime.
Как настроить сеанс
По умолчанию обнаружение плоскостей в сеансах XR не включено. Чтобы включить отслеживание плоскостей, настройте сеанс и задайте режим PlaneTrackingMode.HORIZONTAL_AND_VERTICAL:
val newConfig = Config.Builder(session.config) .setPlaneTracking(PlaneTrackingMode.HORIZONTAL_AND_VERTICAL) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Получение информации о расположении обнаруженных объектов
ARCore для Jetpack XR предоставляет информацию о плоскостях с помощью StateFlow, который передает данные о состоянии плоскостей. Подписка на плоскости в сеансе позволяет приложению получать уведомления о добавлении, обновлении или удалении плоскостей.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
У плоскости есть следующие свойства:
label– семантическое описаниеPlane. Возможные значения:WALL,FLOOR,CEILINGилиTABLE.centerPose– положение центра обнаруженной плоскости.extents– размеры обнаруженной плоскости в метрах.vertices– список вершин выпуклого многоугольника, который аппроксимирует плоскость.
Как выполнить проверку попадания по плоскостям
Проверка попадания луча – это метод расчета пересечения луча с объектами, отслеживаемыми сеансом. Чаще всего проверка попадания используется, чтобы указать на стол и разместить на нем объект. В результате проверки попадания создается список объектов, в которые попал луч. Другими словами, проверка попадания не останавливается на первом объекте. Однако часто вас может интересовать только первый объект определенного типа.
Чтобы выполнить проверку попадания, используйте Interaction.hitTest() с 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 == PlaneLabel.TABLE }