As APIs Streetscape Geometry fornecem a geometria do terreno, edifícios ou outras estruturas em uma cena. A geometria pode ser usada para obstrução, renderização ou posicionamento de conteúdo de RA por meio de APIs de hit-test. Os dados do Streetscape Geometry são obtidos por meio de imagens do Google Street View.
Configurar a API Geospatial
Para usar a geometria da paisagem urbana, você precisa configurar a API Geospatial no seu projeto. Siga as instruções em Como ativar a API Geospatial para configurar a API Geospatial.
Ativar a geometria da paisagem urbana
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);
Extrair a geometria da paisagem urbana em uma sessão do ARCore
UseArSession_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);
Entenda o ArStreetscapeGeometry
ArStreetscapeGeometry
contém informações sobre um edifício:
-
ArStreetscapeGeometry_getType()
Identifique a StreetscapeGeometry como terreno ou edifício. -
ArStreetscapeGeometry_acquireMesh()
Recebe um polígonoArMesh
que corresponde a esse terreno ou edifício. -
ArStreetscapeGeometry_getMeshPose()
Descreve a origem da geometria. Todos os pontos noArMesh
precisam ser transformados porArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Fornece a qualidade dos dados da malha. Os níveis de detalhes são descritos no padrão CityGML 2.0.
Edifício LOD 1
O AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
consiste em impressões de construção extrudadas para cima até uma parte superior plana. As alturas dos edifícios podem estar incorretas.
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:
ArMesh_getVertexListSize()
Retorna o número de vértices na malha.ArMesh_getVertexList()
Obter as posições concatenadas dos vértices da malha em coordenadas relativas aArStreetscapeGeometry_getMeshPose()
ArMesh_getIndexListSize()
Retorna o número de índices nessa malha.ArMesh_getIndexList()
Conseguir os índices dos vértices que compõem um rosto.
Anexar conteúdo de RA a um ArStreetscapeGeometry
Há duas maneiras de anexar conteúdo de RA à geometria do Street View:
- Ative Profundidade geoespacial e use um Teste de profundidade de profundidade. Esse é o método mais fácil e recomendado.
- Use
ArTrackable_acquireNewAnchor()
para criar uma âncora em uma determinada pose anexada a umaArStreetscapeGeometry
. Essa âncora vai herdar o estado de rastreamento doArStreetscapeGeometry
pai.
Executar um teste de hit em ArStreetscapeGeometry
ArFrame_hitTest
pode ser usado para fazer testes de hit com a geometria da paisagem urbana. 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 opção Geospatial Depth combina a Geometria do Streetscape com entrada de sensor local para aprimorar 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.