Las APIs de Streetscape Geometry proporcionan la geometría del terreno, los edificios y otras estructuras de una escena. La geometría se puede usar para la oclusión, la renderización o la colocación de contenido de RA a través de APIs de prueba de colisiones. Los datos de geometría del paisaje urbano se obtienen a través de las imágenes de Google Street View.
Prueba la muestra
En la app GeospatialExample, se muestra cómo obtener y renderizar geometrías de paisaje urbano.
Configura la API de Geospatial
Para usar Streetscape Geometry, deberás configurar la API de Geospatial en tu proyecto. Sigue las instrucciones de Habilita la API de Geospatial para configurar la API de Geospatial.
Habilita la geometría del paisaje urbano
La API de Geospatial obtiene datos de Streetscape Geometry cuando GARGeospatialMode se establece en GARGeospatialModeEnabled y GARStreetscapeGeometryMode se establece en GARStreetscapeGeometryModeEnabled.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Obtén la geometría del paisaje urbano en una sesión de ARCore
UsaGARFrame.streetscapeGeometries para obtener todos los objetos GARStreetscapeGeometry.
Comprende GARStreetscapeGeometry
GARStreetscapeGeometry contiene información sobre un edificio:
-
GARStreetscapeGeometry.type
Identifica StreetscapeGeometry como un terreno o un edificio. -
GARStreetscapeGeometry.mesh
Obtén un polígonoGARMeshque corresponda a este terreno o edificio. -
GARStreetscapeGeometry.meshTransform
Describe el origen de la geometría. Todos los puntos deGARMeshdeben transformarse conGARStreetscapeGeometry.meshTransform. -
GARStreetscapeGeometry.quality
Proporciona la calidad de los datos de malla. Los niveles de detalle se describen en el estándar CityGML 2.0.
Edificio LOD 1
GARStreetscapeGeometryQualityBuildingLOD_1 consta de huellas de edificios extruidas hacia arriba hasta una parte superior plana. Es posible que las alturas de los edificios no sean precisas.

LOD 2 del edificio
GARStreetscapeGeometryQualityBuildingLOD_2 tendrá una geometría de mayor fidelidad. Las paredes y los techos de malla se ajustarán mejor a la forma del edificio. Es posible que los elementos más pequeños, como las chimeneas o los respiraderos del techo, sobresalgan de la malla.

Comprende GARMesh
GARMesh es una malla de polígonos que representa una reconstrucción de superficie de la geometría del paisaje urbano.
Cada GARMesh incluye un búfer de vértices y un búfer de índices:
GARMesh.vertexCount
Recupera la cantidad de vértices en esta malla.GARMesh.vertices
Obtén las posiciones concatenadas de los vértices de la malla, en coordenadas relativas aGARStreetscapeGeometry.meshTransform.GARMesh.triangleCount
Recupera la cantidad de índices en esta malla.GARMesh.triangles
Obtén los índices de los vértices que conforman un rostro.
Cómo adjuntar contenido de RA a un GARStreetscapeGeometry
Usa GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: para crear un ancla en una pose determinada cerca de GARStreetscapeGeometry.meshTransform. Este ancla heredará su estado de seguimiento del elemento superior GARStreetscapeGeometry.
Realiza una prueba de posicionamiento en GARStreetscapeGeometry.
Se puede usar GARSession.raycastStreetscapeGeometry:direction:error: para realizar una prueba de posicionamiento en la geometría del paisaje urbano. Si se encuentran intersecciones, GARStreetscapeGeometryRaycastResult contiene información de pose sobre la ubicación del hit, así como una referencia al GARStreetscapeGeometry que se golpeó. Esta geometría del paisaje urbano se puede pasar a GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: para crear un ancla adjunta.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];