ARCore для Jetpack XR может обнаруживать плоские поверхности в окружении пользователя и предоставлять информацию о них, такую как поза, размер и ориентация. Это поможет вашему приложению находить поверхности, например, столы, для размещения на них объектов.
Создайте сеанс ARCore для Jetpack XR
Доступ к информации о самолёте через сеанс ARCore для Jetpack XR. Чтобы получить доступ к Session
, см . раздел «Понимание жизненного цикла сеанса» .
Настроить сеанс
Обнаружение плоскости по умолчанию отключено в сеансах XR. Чтобы включить отслеживание плоскости, настройте сеанс и установите режим 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. */) }
Восстановить состояние воспринимаемых плоскостей
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 == Plane.Label.TABLE }