Las APIs de geometría del paisaje urbano 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 mediante las APIs de pruebas de posicionamiento. 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 de GeospatialExample, se muestra cómo obtener y renderizar geometrías del paisaje urbano.
Configura la API de Geospatial
Para usar Streetscape Geometry, deberás configurar la API de Geospatial en tu proyecto. Sigue las instrucciones que se indican en Cómo habilitar la API de Geospatial para configurarla.
Habilitar 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
.
Información sobre GARStreetscapeGeometry
GARStreetscapeGeometry
: Contiene información sobre un edificio:
-
GARStreetscapeGeometry.type
Identifica la geometría del paisaje urbano como terreno o un edificio. -
GARStreetscapeGeometry.mesh
Obtén un polígonoGARMesh
que corresponda a este terreno o edificio. -
GARStreetscapeGeometry.meshTransform
Describe el origen de la geometría.GARStreetscapeGeometry.meshTransform
debe transformar todos los puntos deGARMesh
. -
GARStreetscapeGeometry.quality
Proporciona la calidad de los datos de la malla. Los niveles de detalle se describen en el estándar CityGML 2.0.
Nivel de detalle de edificio 1
El objeto GARStreetscapeGeometryQualityBuildingLOD_1
consiste en huellas de edificios extruidas hacia arriba hasta una parte superior plana. Las alturas de los edificios pueden ser imprecisas.
Nivel de detalle de construcción 2
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. Las características más pequeñas, como las chimeneas o los conductos de ventilación del techo, podrían salir de la malla.
Información sobre 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értice y un búfer de índice:
GARMesh.vertexCount
Recupera la cantidad de vértices de esta malla.GARMesh.vertices
Obtén las posiciones concatenadas de los vértices de la malla, en coordenadas relacionadas conGARStreetscapeGeometry.meshTransform
.GARMesh.triangleCount
Recupera la cantidad de índices de esta malla.GARMesh.triangles
Obtén los índices de los vértices que conforman un rostro.
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 contra GARStreetscapeGeometry
Se puede usar GARSession.raycastStreetscapeGeometry:direction:error:
para realizar pruebas de posicionamiento con la geometría del paisaje urbano. Si se encuentran intersecciones, GARStreetscapeGeometryRaycastResult
contiene información de la pose sobre la ubicación del hit, así como una referencia a GARStreetscapeGeometry
que se alcanzó. 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];