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
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);
Entender o ArStreetscapeGeometry
ArStreetscapeGeometry
contém informações sobre uma construção:
-
ArStreetscapeGeometry_getType()
Identifica StreetscapeGeometry como um terreno ou uma construção. -
ArStreetscapeGeometry_acquireMesh()
Encontre um polígonoArMesh
que corresponda a esse terreno ou construção. -
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 detalhamento são descritos no padrão CityGML 2.0.
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:
ArMesh_getVertexListSize()
Recupera 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()
Recupera o número de índices na malha.ArMesh_getIndexList()
Conseguir os índices de vértices que compõem uma face.
Anexar conteúdo de RA a um ArStreetscapeGeometry
Há duas maneiras de anexar conteúdo de RA ao Streetscape Geometry:
- 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
. Esta âncora herdará o estado de acompanhamento doArStreetscapeGeometry
pai.
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.