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

Применимые устройства XR
Это руководство поможет вам создать опыт использования этих типов XR-устройств.
Гарнитуры XR
Проводные очки XR

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

Доступ к сеансу

Доступ к информации о плоскости осуществляется через Session ARCore для Jetpack XR. Если вы улучшаете пространственный пользовательский интерфейс с помощью Jetpack Compose для XR, обратитесь к сеансу из Jetpack Compose для XR . Если вы работаете с пространственными сущностями из библиотеки Jetpack SceneCore, обратитесь к сеансу из Jetpack XR Runtime .

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

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

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
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 == Plane.Label.TABLE
}