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
содержит информацию о здании:
-
GARStreetscapeGeometry.type
Идентифицирует StreetscapeGeometry как местность или здание. -
GARStreetscapeGeometry.mesh
Получите полигонGARMesh
, соответствующий этой местности или зданию. -
GARStreetscapeGeometry.meshTransform
Описывает происхождение геометрии. Все точки вGARMesh
должны быть преобразованы с помощьюGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
Обеспечивает качество данных сетки. Уровни детализации описаны в стандарте CityGML 2.0 .
Здание ЛОД 1
GARStreetscapeGeometryQualityBuildingLOD_1
состоит из контуров зданий, вытянутых вверх до плоской вершины. Высота здания может быть неточной.
Здание ЛОД 2
GARStreetscapeGeometryQualityBuildingLOD_2
будет иметь геометрию более высокой точности. Сетчатые стены и крыши будут более точно соответствовать форме здания. Меньшие элементы, такие как дымоходы или вентиляционные отверстия на крыше, все еще могут выступать за пределы сетки.
Понимание GARMesh
GARMesh
— это полигональная сетка, представляющая поверхностную реконструкцию геометрии уличного пейзажа. Каждая GARMesh
включает в себя буфер вершин и буфер индексов:
-
GARMesh.vertexCount
Получает количество вершин в этой сетке. -
GARMesh.vertices
Получите объединенные позиции вершин сетки в координатах относительноGARStreetscapeGeometry.meshTransform
. -
GARMesh.triangleCount
Получает количество индексов в этой сетке. -
GARMesh.triangles
Получите индексы вершин, составляющих грань.
Прикрепите контент 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];