Usar edifícios e terrenos ao seu redor no Android NDK (C)

As APIs Streetscape Geometry oferecem a geometria do terreno, dos edifícios ou de outras estruturas em uma cena. A geometria pode ser usada para oclusão, renderização ou colocação de conteúdo de RA com APIs de teste de hit. Os dados da geometria do Streetscape são obtidos por meio de imagens do Google Street View.

Configurar a API Geospatial

Para usar a geometria do Streetscape, é necessário configurar a API Geospatial no seu projeto. Siga as instruções em Como ativar a API Geospatial para configurar a API Geospatial.

Ativar geometria da paisagem urbana

A API Geospatial acessa dados de geometria do Streetscape quando ArGeospatialMode é definido como ArGeospatialModeEnabled e ArStreetscapeGeometryMode está definido como 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);

Conseguir a geometria do Streetscape em uma sessão do ARCore

Use ArSession_getAllTrackables() e AR_TRACKABLE_STREETSCAPE_GEOMETRY para filtrar resultados.

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

Entender o ArStreetscapeGeometry

ArStreetscapeGeometry contém informações sobre um edifício:

Construção LOD 1

O AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 consiste na construção de plantações deslocadas para cima em direção a um topo plano. A altura das construções pode ser imprecisa.

Construção LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 terá geometria de maior fidelidade. As paredes e os telhados de malha combinarão melhor com a forma do edifício. Recursos menores, como chaminés ou saídas de ventilação, ainda podem furar para fora da malha.

Entender o ArMesh

ArMesh é uma malha de polígonos que representa uma reconstrução de superfície da geometria da paisagem urbana. Cada ArMesh inclui um buffer de vértice e um buffer de índice:

Anexar conteúdo de RA a um ArStreetscapeGeometry

Há duas maneiras de anexar conteúdo de RA ao Streetscape Geometry:

Realize um teste de hit no ArStreetscapeGeometry

ArFrame_hitTest pode ser usado para fazer teste de hit com a geometria do Streetscape. Se cruzamentos forem encontrados, ArHitResult vai conter informações de poses sobre o local do hit, bem como uma referência à ArStreetscapeGeometry que foi atingida. Essa geometria da paisagem urbana pode ser transmitida a ArTrackable_acquireNewAnchor() para criar uma âncora anexada a ela.

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);

Ativar profundidade geoespacial

A Profundidade geoespacial combina a geometria do Streetscape com a entrada de sensor local para melhorar os dados de profundidade. Quando a profundidade geoespacial está ativada, as imagens de profundidade de saída e de profundidade bruta são modificadas para incluir a geometria rasterizada do Streetscape, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a Profundidade.