API-интерфейсы Streetscape Geometry предоставляют геометрию местности, зданий или других структур в сцене. Геометрию можно использовать для окклюзии, рендеринга или размещения AR-контента с помощью API-интерфейсов проверки попадания. Данные Streetscape Geometry получены с помощью изображений Google Street View.
Настройте геопространственный API
Чтобы использовать Streetscape Geometry, вам необходимо настроить Geospatial API в своем проекте. Следуйте инструкциям по включению Geospatial API , чтобы настроить Geospatial API.
Включить геометрию уличного пейзажа
Geospatial API получает данные Streetscape Geometry, когда для ArGeospatialMode
установлено значение ArGeospatialModeEnabled
, а ArStreetscapeGeometryMode
установлено значение ArStreetscapeGeometryModeEnabled
.
// Create a session config. ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); // Enable the Geospatial API. ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Enable Streetscape Geometry. ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Release config resources. ArConfig_destroy(ar_config);
Получите геометрию Streetscape в сеансе ARCore
ИспользуйтеArSession_getAllTrackables()
и AR_TRACKABLE_STREETSCAPE_GEOMETRY
для фильтрации результатов. ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Понимание ArStreetscapeGeometry
ArStreetscapeGeometry
содержит информацию о здании:
-
ArStreetscapeGeometry_getType()
Идентифицирует StreetscapeGeometry как местность или здание. -
ArStreetscapeGeometry_acquireMesh()
Получите полигонArMesh
, соответствующий этой местности или зданию. -
ArStreetscapeGeometry_getMeshPose()
Описывает происхождение геометрии. Все точки вArMesh
должны быть преобразованы с помощьюArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Обеспечивает качество данных сетки. Уровни детализации описаны в стандарте CityGML 2.0 .
Здание ЛОД 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
состоит из контуров зданий, вытянутых вверх до плоской вершины. Высота здания может быть неточной.
Здание ЛОД 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
будет иметь геометрию более высокой точности. Сетчатые стены и крыши будут более точно соответствовать форме здания. Меньшие элементы, такие как дымоходы или вентиляционные отверстия на крыше, все равно могут выступать за пределы сетки.
Понимание ArMesh
ArMesh
— это полигональная сетка, представляющая поверхностную реконструкцию геометрии Streetscape. Каждый ArMesh
включает в себя буфер вершин и буфер индексов:
-
ArMesh_getVertexListSize()
Получает количество вершин в этой сетке. -
ArMesh_getVertexList()
Получите объединенные позиции вершин сетки в координатах относительноArStreetscapeGeometry_getMeshPose()
. -
ArMesh_getIndexListSize()
Получает количество индексов в этой сетке. -
ArMesh_getIndexList()
Получите индексы вершин, составляющих грань.
Прикрепите контент AR к ArStreetscapeGeometry
Есть два способа прикрепить AR-контент к Streetscape Geometry:- Включите геопространственную глубину и используйте проверку глубины . Это рекомендуемый и более простой метод.
- Используйте
ArTrackable_acquireNewAnchor()
для создания привязки в заданной позе, прикрепленной кArStreetscapeGeometry
. Этот якорь унаследует свое состояние отслеживания от родительскогоArStreetscapeGeometry
.
Выполните проверку попадания в ArStreetscapeGeometry
ArFrame_hitTest
можно использовать для проверки соответствия геометрии Streetscape. Если пересечения найдены, ArHitResult
содержит информацию о положении места попадания, а также ссылку на объект ArStreetscapeGeometry
, в который был нанесен удар. Эту геометрию Streetscape можно передать в ArTrackable_acquireNewAnchor()
чтобы создать прикрепленную к ней якорь.
ArHitResultList *hit_result_list = NULL; ArHitResult *hit_result = NULL; ArHitResultList_create(ar_session, &hit_result_list); ArHitResult_create(ar_session, &hit_result); ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list); ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result); ArAnchor *out_anchor = NULL; ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor); CHECK(status == AR_SUCCESS);
Включить геопространственную глубину
Geospatial Depth сочетает в себе геометрию уличного пейзажа с данными местных датчиков для улучшения данных о глубине. Когда геопространственная глубина включена, выходные изображения глубины и необработанные изображения глубины изменяются, чтобы включать растровую геометрию уличного пейзажа в дополнение к локально наблюдаемой глубине. Это может повысить точность поз с использованием глубины.