Используйте здания и местность вокруг вас в Android SDK (Kotlin/Java)

API-интерфейсы Streetscape Geometry предоставляют геометрию местности, зданий или других структур в сцене. Геометрию можно использовать для окклюзии, рендеринга или размещения AR-контента с помощью API-интерфейсов проверки попадания. Данные Streetscape Geometry получены с помощью изображений Google Street View.

Попробуйте образец

Пример приложения geospatial_java демонстрирует, как получить и визуализировать геометрию Streetscape.

Настройте геопространственный API

Чтобы использовать Streetscape Geometry, вам необходимо настроить Geospatial API в своем проекте. Следуйте инструкциям по включению Geospatial API, чтобы настроить Geospatial API.

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

Geospatial API получает данные Streetscape Geometry, когда для GeospatialMode установлено значение GeospatialMode.ENABLED , а StreetscapeGeometryMode установлено значение StreetscapeGeometryMode.ENABLED .

Ява

Config config = session.getConfig();
// Streetscape Geometry requires the Geospatial API to be enabled.
config.setGeospatialMode(Config.GeospatialMode.ENABLED);
// Enable Streetscape Geometry.
config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
session.configure(config);

Котлин

session.configure(
  session.config.apply {
    // Streetscape Geometry requires the Geospatial API to be enabled.
    geospatialMode = Config.GeospatialMode.ENABLED
    // Enable Streetscape Geometry.
    streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
  }
)

Получите геометрию Streetscape в сеансе ARCore

Используйте Session.getAllTrackables() и StreetscapeGeometry.class для фильтрации результатов.

Ява

session.getAllTrackables(StreetscapeGeometry.class);

Котлин

session.getAllTrackables(StreetscapeGeometry::class.java)

Понимание StreetscapeGeometry

StreetscapeGeometry содержит информацию о здании:

Здание ЛОД 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 состоит из контуров зданий, вытянутых вверх до плоской вершины. Высота здания может быть неточной.

Здание ЛОД 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 будет иметь геометрию более высокой точности. Сетчатые стены и крыши будут более точно соответствовать форме здания. Меньшие элементы, такие как дымоходы или вентиляционные отверстия на крыше, все равно могут выступать за пределы сетки.

Понимание Mesh

Mesh — это полигональная сетка, представляющая поверхностную реконструкцию геометрии уличного пейзажа. Каждая Mesh включает в себя буфер вершин и буфер индексов:

Прикрепите контент AR к StreetscapeGeometry

Есть два способа прикрепить AR-контент к Streetscape Geometry:

Выполните проверку попадания в StreetscapeGeometry

Frame.hitTest() можно использовать для проверки соответствия геометрии Streetscape. Если пересечения найдены, HitResult содержит информацию о позе места удара, а также ссылку на StreetscapeGeometry , в который был нанесен удар. Эту геометрию Streetscape можно передать в Trackable.createAnchor() , чтобы создать прикрепленную к ней якорь.

Ява

for (HitResult hit : frame.hitTest(singleTapEvent)) {
  if (hit.getTrackable() instanceof StreetscapeGeometry) {
    Pose hitPose = hit.getHitPose();
    hit.getTrackable().createAnchor(hitPose);
  }
}

Котлин

for (hit in frame.hitTest(singleTapEvent)) {
  if (hit.trackable is StreetscapeGeometry) {
    val hitPose = hit.hitPose
    hit.trackable.createAnchor(hitPose)
  }
}

Включить геопространственную глубину

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