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

ARCore для Jetpack XR может обнаруживать плоские поверхности в среде пользователя и предоставлять о них такую ​​информацию, как их поза, размер и ориентация. Это может помочь вашему приложению находить поверхности, такие как столы, для размещения объектов.

Создайте сеанс ARCore для Jetpack XR.

Доступ к информации о плоскости через сеанс ARCore для Jetpack XR. Чтобы получить информацию о Session , см. раздел «Понимание жизненного цикла сеанса» .

Настройте сеанс

Обнаружение самолетов по умолчанию не включено в сеансах XR. Чтобы включить отслеживание самолетов, настройте сеанс:

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! */)
}

Получить состояние воспринимаемых плоскостей

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
}