Обнаруживайте самолеты с помощью ARCore для Jetpack XR

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
}