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

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 содержит информацию о здании:

Здание ЛОД 1

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

Здание ЛОД 2

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

Понимание ArMesh

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

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

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

Выполните проверку попадания в 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 сочетает в себе геометрию уличного пейзажа с данными местных датчиков для улучшения данных о глубине. Когда геопространственная глубина включена, выходные изображения глубины и необработанные изображения глубины изменяются, чтобы включать растровую геометрию уличного пейзажа в дополнение к локально наблюдаемой глубине. Это может повысить точность поз с использованием глубины.