As APIs Streetscape Geometry fornecem a geometria de terrenos, 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 de geometria da paisagem urbana são obtidos com as 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 extrai dados da geometria da paisagem urbana quando ArGeospatialMode
é definido como ArGeospatialModeEnabled
e ArStreetscapeGeometryMode
é 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.
Criação de 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.
LOD 2 do edifício
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
terá uma geometria de maior fidelidade. As paredes e os telhados de malha vão se ajustar melhor à forma do edifício. Elementos menores, como chaminés ou aberturas no telhado, ainda podem aparecer fora da malha.
Entenda 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értices e um buffer de índice:
ArMesh_getVertexListSize()
Retorna o número de vértices na malha.ArMesh_getVertexList()
Receba 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 a Geospatial Depth e use um teste de acerto de profundidade. Esse é o método recomendado e mais fácil.
- Use
ArTrackable_acquireNewAnchor()
para criar uma âncora em uma determinada pose anexada a umArStreetscapeGeometry
. Essa âncora vai herdar o estado de rastreamento doArStreetscapeGeometry
pai.
Realize um teste de hit em ArStreetscapeGeometry
.
ArFrame_hitTest
pode ser usado para fazer testes de hit com a geometria da paisagem urbana. Se houver interseções, ArHitResult
vai conter informações sobre o local do hit e uma referência ao ArStreetscapeGeometry
que foi atingido. Essa geometria Streetscape pode ser transmitida para 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 a profundidade geoespacial
A Geospatial Depth combina a Streetscape Geometry com a entrada do sensor local para melhorar os dados de profundidade. Quando a API Geospatial Depth está ativada, a profundidade de saída e as imagens de profundidade bruta são modificadas para incluir a geometria da paisagem urbana rasterizada, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a profundidade.