Usar edifícios e terrenos ao seu redor no iOS

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.

Testar o exemplo

O app GeospatialExample demonstra como receber e renderizar geometrias do Streetscape.

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 GARGeospatialMode está definido como GARGeospatialModeEnabled e GARStreetscapeGeometryMode está definido como GARStreetscapeGeometryModeEnabled.

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];

Obter Streetscape Geometry em uma sessão do ARCore

Use GARFrame.streetscapeGeometries para acessar todos os objetos GARStreetscapeGeometry.

Entender o GARStreetscapeGeometry

GARStreetscapeGeometry contém informações sobre uma construção:

Edifício LOD 1

GARStreetscapeGeometryQualityBuildingLOD_1 consiste em plantas extruídas para cima até um topo plano. A altura das construções pode estar incorreta.

Edifício LOD 2

GARStreetscapeGeometryQualityBuildingLOD_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 GARMesh

GARMesh é uma malha de polígonos que representa uma reconstrução de superfície do Streetscape Geometry. Cada GARMesh inclui um buffer de vértice e de índice:

Anexar conteúdo de RA a um GARStreetscapeGeometry

Use GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: para criar um ponto âncora em uma determinada pose perto de GARStreetscapeGeometry.meshTransform. Esta âncora herdará o estado de acompanhamento do GARStreetscapeGeometry pai.

Executar um teste de hit em GARStreetscapeGeometry

GARSession.raycastStreetscapeGeometry:direction:error: pode ser usado para fazer um teste de hit em relação ao Streetscape Geometry. Se houver cruzamentos, GARStreetscapeGeometryRaycastResult conterá informações de pose sobre o local do hit, bem como uma referência ao GARStreetscapeGeometry que foi atingido. Esse Streetscape Geometry pode ser transmitido a GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: para criar uma âncora anexada a ele.

NSArray<GARStreetscapeGeometryRaycastResult *> *results =
    [session raycastStreetscapeGeometry:arRaycastQuery.origin
                              direction:arRaycastQuery.direction
                                  error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
                                 transform:results[0].worldTransform
                                     error:&error];