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.
Testar o exemplo
O app GeospatialExample demonstra como conseguir e renderizar geometrias da paisagem urbana.
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 GARGeospatialMode
é definido como GARGeospatialModeEnabled
e GARStreetscapeGeometryMode
é definido como GARStreetscapeGeometryModeEnabled
.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Extrair a geometria da paisagem urbana em uma sessão do ARCore
UseGARFrame.streetscapeGeometries
para acessar todos os objetos GARStreetscapeGeometry
.
Entenda o GARStreetscapeGeometry
GARStreetscapeGeometry
contém informações sobre um edifício:
-
GARStreetscapeGeometry.type
Identifique a StreetscapeGeometry como terreno ou edifício. -
GARStreetscapeGeometry.mesh
Recebe um polígonoGARMesh
que corresponde a esse terreno ou edifício. -
GARStreetscapeGeometry.meshTransform
Descreve a origem da geometria. Todos os pontos noGARMesh
precisam ser transformados porGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
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 GARStreetscapeGeometryQualityBuildingLOD_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
GARStreetscapeGeometryQualityBuildingLOD_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 GARMesh
GARMesh
é uma malha de polígonos que representa uma reconstrução de superfície da geometria da paisagem urbana.
Cada GARMesh
inclui um buffer de vértices e um buffer de índice:
GARMesh.vertexCount
Retorna o número de vértices na malha.GARMesh.vertices
Receba as posições concatenadas dos vértices da malha, em coordenadas relativas aGARStreetscapeGeometry.meshTransform
.GARMesh.triangleCount
Retorna o número de índices nessa malha.GARMesh.triangles
Conseguir os índices dos vértices que compõem um rosto.
Anexar conteúdo de RA a um GARStreetscapeGeometry
Use GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
para criar uma âncora em uma determinada pose perto de GARStreetscapeGeometry.meshTransform
. Essa âncora vai herdar o estado de rastreamento do GARStreetscapeGeometry
pai.
Realize um teste de hit em GARStreetscapeGeometry
.
GARSession.raycastStreetscapeGeometry:direction:error:
pode ser usado para fazer testes de hit com a geometria da paisagem urbana. Se houver interseções, GARStreetscapeGeometryRaycastResult
vai conter informações sobre o local do hit e uma referência ao GARStreetscapeGeometry
que foi atingido. Essa geometria Streetscape pode ser transmitida para GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
para criar uma âncora anexada a ela.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];