Usar edifícios e terrenos ao seu redor no iOS

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

Use GARFrame.streetscapeGeometries para acessar todos os objetos GARStreetscapeGeometry.

Entenda o GARStreetscapeGeometry

GARStreetscapeGeometry contém informações sobre um edifício:

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:

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];