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

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

Configurar a API Geospatial

Para usar o Streetscape Geometry, você precisará configurar a API Geospatial no seu projeto. Siga as instruções em Como ativar a API Geospatial para configurar a API Geospatial.

Ativar Streetscape Geometry

A API Geospatial recebe os dados do Streetscape Geometry quando ArGeospatialMode está 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);

Obter Streetscape Geometry em uma sessão do ARCore

Use ArSession_getAllTrackables() e AR_TRACKABLE_STREETSCAPE_GEOMETRY para filtrar os 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 uma construção:

Edifício LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 consiste em plantas extruídas para cima até um topo plano. A altura das construções pode estar incorreta.

Edifício LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 terá uma geometria de maior fidelidade. Paredes e telhados de malha vão se aproximar mais do formato do edifício. Recursos menores, como chaminés ou aberturas no telhado, ainda podem sair da rede mesh.

Entender o ArMesh

ArMesh é uma malha de polígonos que representa uma reconstrução de superfície do Streetscape Geometry. Cada ArMesh inclui um buffer de vértice e de índice:

Anexar conteúdo de RA a um ArStreetscapeGeometry

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

Executar um teste de hit em ArStreetscapeGeometry

ArFrame_hitTest pode ser usado para fazer um teste de hit em relação ao Streetscape Geometry. Se houver cruzamentos, ArHitResult conterá informações de pose sobre o local do hit, bem como uma referência ao ArStreetscapeGeometry que foi atingido. Esse Streetscape Geometry pode ser transmitido a ArTrackable_acquireNewAnchor() para criar uma âncora anexada a ele.

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 Streetscape Geometry. com entrada de sensor local para aprimorar os dados de profundidade. Quando a opção "Geospatial Depth" está ativada, a profundidade de saída e as imagens de profundidade bruta são modificadas para incluir a imagem rasterizada Streetscape Geometry, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a Profundidade.