Используйте здания и местность вокруг вас на iOS

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

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

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

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

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

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

Geospatial API получает данные Streetscape Geometry, когда для GARGeospatialMode установлено значение GARGeospatialModeEnabled , а для GARStreetscapeGeometryMode установлено значение GARStreetscapeGeometryModeEnabled .

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];

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

Используйте GARFrame.streetscapeGeometries для получения всех объектов GARStreetscapeGeometry .

Понимание GARStreetscapeGeometry

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

Здание ЛОД 1

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

Здание ЛОД 2

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

Понимание GARMesh

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

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

Используйте GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: для создания привязки в заданной позе рядом с GARStreetscapeGeometry.meshTransform . Этот якорь унаследует свое состояние отслеживания от родительского GARStreetscapeGeometry .

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

GARSession.raycastStreetscapeGeometry:direction:error: можно использовать для проверки соответствия Streetscape Geometry. Если пересечения найдены, GARStreetscapeGeometryRaycastResult содержит информацию о позиции о месте попадания, а также ссылку на GARStreetscapeGeometry , в который произошло попадание. Эту геометрию Streetscape можно передать в GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: для создания прикрепленной к ней привязки.

NSArray<GARStreetscapeGeometryRaycastResult *> *results =
    [session raycastStreetscapeGeometry:arRaycastQuery.origin
                              direction:arRaycastQuery.direction
                                  error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
                                 transform:results[0].worldTransform
                                     error:&error];

,

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

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

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

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

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

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

Geospatial API получает данные Streetscape Geometry, когда для GARGeospatialMode установлено значение GARGeospatialModeEnabled , а для GARStreetscapeGeometryMode установлено значение GARStreetscapeGeometryModeEnabled .

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];

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

Используйте GARFrame.streetscapeGeometries для получения всех объектов GARStreetscapeGeometry .

Понимание GARStreetscapeGeometry

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

Здание ЛОД 1

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

Здание ЛОД 2

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

Понимание GARMesh

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

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

Используйте GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: для создания привязки в заданной позе рядом с GARStreetscapeGeometry.meshTransform . Этот якорь унаследует свое состояние отслеживания от родительского GARStreetscapeGeometry .

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

GARSession.raycastStreetscapeGeometry:direction:error: можно использовать для проверки соответствия Streetscape Geometry. Если пересечения найдены, GARStreetscapeGeometryRaycastResult содержит информацию о позиции о месте попадания, а также ссылку на GARStreetscapeGeometry , в который произошло попадание. Эту геометрию Streetscape можно передать в GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: для создания прикрепленной к ней привязки.

NSArray<GARStreetscapeGeometryRaycastResult *> *results =
    [session raycastStreetscapeGeometry:arRaycastQuery.origin
                              direction:arRaycastQuery.direction
                                  error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
                                 transform:results[0].worldTransform
                                     error:&error];