Начните работу с API Streetscape Geometry и Rooftop anchors в ARCore

1. Прежде чем начать

ARCore — это фреймворк Google для создания приложений дополненной реальности (AR) на смартфонах. API Geospatial Streetscape Geometry и Rooftop anchor помогают вашим приложениям дополненной реальности анализировать здания вокруг пользователей.

В этой лабораторной работе вы создадите приложение дополненной реальности, которое визуализирует геометрию городского пейзажа вашего района и позволяет украсить его стены. Затем вы с помощью анкеров для крыш добавите декор на крыши окружающих домов.

Полная демоверсия приложения codelab

Предпосылки

Чему вы научитесь

  • Как настроить проект Google Cloud, который может использовать API геопространственных данных ARCore.
  • Как получить геометрию городского пейзажа из Geospatial API.
  • Как визуализировать здания и ландшафты, полученные с помощью геометрии городского пейзажа.
  • Как выполнить основные расчеты над полученными полигонами.
  • Как выполнить проверку на попадание в геометрию.
  • Как использовать анкеры для крепления содержимого к верхним частям зданий.

Что вам понадобится

2. Настройте свою среду

Чтобы использовать геопространственные API с Kotlin и Android Studio, вам понадобится проект Google Cloud и наш стартовый проект.

Настройте проект Google Cloud

ARCore Geospatial API подключается к Google Cloud для предоставления информации о локализации из системы визуального позиционирования Google (VPS) в областях, охватываемых Google Street View.

Чтобы использовать этот сервер в своем проекте, выполните следующие действия:

  1. Создайте проект в Google Cloud . Создайте проект Google Cloud
  2. В поле Имя проекта введите подходящее имя, например, ARCore Geospatial API project , и выберите любое местоположение.
  3. Нажмите «Создать» .
  4. В консоли Google Cloud на странице выбора проектов нажмите Создать проект .
  5. Щелкните следующую ссылку, чтобы просмотреть API ARCore для этого проекта, и щелкните Включить :
  6. Создайте API-ключ для вашего проекта:
    1. В разделе API и службы выберите Учетные данные .
    2. Нажмите Создать учетные данные и выберите Ключ API .
    3. Запишите ключ, он понадобится вам позже.

Вы создали проект Google Cloud с авторизацией по ключу API и готовы использовать Geospatial API в примере проекта.

Настройка Android Studio

Для начала работы с Geospatial API мы предоставили стартовый проект, который включает в себя основы проекта ARCore, интегрированного с Geospatial API.

Чтобы настроить Android Studio, выполните следующие действия:

  1. Откройте Android Studio и выполните одно из следующих действий:
    • Если у вас уже открыт проект, нажмите Файл > Новый > Проект из системы управления версиями .
    • Если вы видите окно «Добро пожаловать в Android Studio» , нажмите « Получить из VCS» . Получить из местоположения VCS
  2. Выберите Git и введите https://github.com/google-ar/codelab-streetscape-geometry-rooftop-anchors.git , чтобы импортировать проект.

Интегрируйте ключ API с проектом Android Studio

Чтобы связать ключ API от Google Cloud с вашим проектом, выполните следующие действия:

  1. В Android Studio нажмите app > src и дважды щелкните AndroidManifest.xml .
  2. Найдите следующие записи meta-data :
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. Замените API_KEY ключом API, созданным в проекте Google Cloud . Значение, сохранённое в com.google.android.ar.API_KEY , разрешает этому приложению использовать геопространственный API.

Проверьте свой проект

  • Чтобы проверить свой проект, запустите приложение на устройстве разработки. В верхней части экрана вы увидите вид с камеры и геопространственную отладочную информацию. Вы также увидите кнопки и элементы управления, которые, на первый взгляд, не имеют функциональности; вы запрограммируете эту функциональность в своем проекте в ходе этой лабораторной работы.

Геопространственная информация отображается в приложении

3. Визуализируйте данные о геометрии городского пейзажа

После того, как вы убедитесь, что Geospatial API работает на вашем устройстве, вы получите геометрию городского пейзажа из Geospatial API.

Включить геометрию городского пейзажа

  1. В файле StreetscapeGeometryActivity.kt найдите следующую строку:
    // TODO: Enable Streetscape Geometry.
    
  2. После этой строки включите режим streetscape-geometry:
    streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
    
    Если включены Geospatial API и режим геометрии уличного пейзажа, ваше приложение может получать информацию о геометрии уличного пейзажа вокруг пользователя.

Получить геометрию городского пейзажа

  1. В файле StreetscapeGeometryActivity.kt найдите следующую строку:
    // TODO: Obtain Streetscape Geometry.
    
  2. После этой строки получим геометрию городского пейзажа, получив все Trackable объекты и отфильтровав по StreetscapeGeometry :
    val streetscapeGeometry = session.getAllTrackables(StreetscapeGeometry::class.java)
    
    Эти геометрические элементы используются в простой визуализации, представленной в примере проекта. Эта визуализация отображает каждое здание или полигон рельефа разным цветом.
  3. На следующей строке добавьте следующий код:
    streetscapeGeometryRenderer.render(render, streetscapeGeometry)
    
  4. Запустите приложение и посетите здание в вашем районе.
  5. После завершения геопространственной локализации нажмите Значок настроек Настройки и включение визуализации геометрии городского пейзажа.
  6. Посмотрите на здание в дополненной реальности. Каждое сегментированное здание имеет свой цвет, а также отображаются перечисления Quality и Type » центральной геометрии.

Геометрия городского пейзажа отображается в приложении

4. Проведите проверку на попадание с использованием данных о геометрии уличного пейзажа.

Теперь, когда вы видите геометрию городского пейзажа, вы можете использовать тест на попадание, чтобы украсить здание. Тест на попадание находит пересечение виртуальной геометрии с лучом. Тест на попадание используется для определения геометрии, на которую нажимает пользователь.

Выполнить тест на попадание

В этом разделе вы размещаете звезду на фасаде здания, когда пользователь нажимает на его геометрию. Вы делаете это с помощью проверки попадания с точки зрения пользователя в игровом мире и регистрируете объекты дополненной реальности, которые встречаются на пути. Затем вы используете эту информацию для проверки того, нажал ли пользователь на полигон здания.

  1. В файле StreetscapeCodelabRenderer.kt найдите следующую строку:
    // TODO: determine the Streetscape Geometry at the center of the viewport
    
  2. После этой строки добавьте следующий код:
    val centerHits = frame.hitTest(centerCoords[0], centerCoords[1])
    val hit = centerHits.firstOrNull {
      val trackable = it.trackable
      trackable is StreetscapeGeometry && trackable.type == StreetscapeGeometry.Type.BUILDING
    } ?: return
    
    Этот код использует координаты центра для поиска геометрического объекта городского пейзажа, представляющего собой здание. Результат используется для добавления декора.

Добавьте звездное украшение на кран

  1. В файле StreetscapeCodelabRenderer.kt найдите следующую строку:
    // TODO: Create an anchor for a star, and add it to the starAnchors object.
    
  2. После этой строки добавьте следующий код:
    val transformedPose = ObjectPlacementHelper.createStarPose(hit.hitPose)
    val anchor = hit.trackable.createAnchor(transformedPose)
    starAnchors.add(anchor)
    
    Класс ObjectPlacementHelper определяет подходящее место для размещения звезды, ориентируясь на позу попадания. Объект starAnchors используется для визуализации звёзд в режиме дополненной реальности.

Попробуй это

  1. Запустите приложение и посетите здание в вашем районе.
  2. После завершения геопространственной локализации наведите камеру на здание и коснитесь экрана. В центре экрана на здании появится звезда.

Звезды размещаются в приложении

5. Используйте данные о якорях на крыше

Наконец, используйте анкеры для крыши, чтобы добавить украшения на крышу здания. Анкеры для крыши позволяют прикрепить анкеры дополненной реальности к крышам зданий с заданной широтой и долготой. Эти анкеры используются для крепления воздушных шаров к зданиям вокруг пользователя.

Добавить поведение в режим воздушного шара

В проекте предусмотрено два режима размещения ресурсов: режим подсолнуха, который вы уже использовали, и режим воздушного шара.

Чтобы запрограммировать поведение режима воздушного шара, выполните следующие действия:

  1. В файле StreetscapeCodelabRenderer.kt найдите следующую строку:
    // TODO: Create an anchor for a balloon and add it to the balloonAnchors object.
    
  2. Используйте позу удара, чтобы создать отличное место для вашего воздушного шара:
    val transformedPose = ObjectPlacementHelper.createBalloonPose(frame.camera.pose, hit.hitPose)
    
  3. Преобразуем transformedPose переменную Pose в геопространственную позу:
    val earth = session?.earth ?: return
    val geospatialPose = earth.getGeospatialPose(transformedPose)
    
  4. Создайте якорь на крыше с преобразованными широтой и долготой:
    earth.resolveAnchorOnRooftopAsync(
      geospatialPose.latitude, geospatialPose.longitude,
      0.0,
      transformedPose.qx(), transformedPose.qy(), transformedPose.qz(), transformedPose.qw()
    ) { anchor, state ->
      if (!state.isError) {
        balloonAnchors.add(anchor)
      }
    }
    

Попробуйте это

  1. Запустите приложение и посетите здание в вашем районе.
  2. После завершения геопространственной локализации перейдите в режим всплывающего окна и коснитесь здания. Над зданием появится всплывающее окно.

Разместите воздушные шары на крышах

6. Заключение

Поздравляем! Вы создали приложение дополненной реальности, которое визуализирует геометрию городского пейзажа вашего района и позволяет украсить его стены звёздами. Вы также использовали анкеры для крыш, чтобы прикрепить воздушный шар к крышам окружающих вас домов.

Полная демоверсия приложения codelab

Узнать больше