Как обнаруживать плоскости с помощью ARCore для Jetpack XR

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

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
}