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 con APIs de prueba de posicionamiento. Los datos de geometría del paisaje urbano se obtienen a través de las imágenes de Google Street View.
Configura la API de Geospatial
Para usar Streetscape Geometry, deberás configurar la API de Geospatial en tu proyecto. Sigue las instrucciones para habilitar la API de Geospatial para configurarla.
Habilitar la geometría del paisaje urbano
La API de Geospatial obtiene los datos de Streetscape Geometry cuando ArGeospatialMode
se establece en ArGeospatialModeEnabled
y ArStreetscapeGeometryMode
se establece en ArStreetscapeGeometryModeEnabled
.
// Create a session config. ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); // Enable the Geospatial API. ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Enable Streetscape Geometry. ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Release config resources. ArConfig_destroy(ar_config);
Obtén la geometría del paisaje urbano en una sesión de ARCore
UsaArSession_getAllTrackables()
y AR_TRACKABLE_STREETSCAPE_GEOMETRY
para filtrar los resultados.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Comprende ArStreetscapeGeometry
ArStreetscapeGeometry
contiene información sobre un edificio:
-
ArStreetscapeGeometry_getType()
Identifica StreetscapeGeometry como terreno o edificio. -
ArStreetscapeGeometry_acquireMesh()
Obtén un polígonoArMesh
que corresponda a este terreno o edificio. -
ArStreetscapeGeometry_getMeshPose()
Describe el origen de la geometría. Todos los puntos deArMesh
deben transformarse conArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Proporciona la calidad de los datos de malla. Los niveles de detalle se describen en el estándar CityGML 2.0.
Nivel de detalle 1 del edificio
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
consta de huellas de edificios extruidas hacia arriba hasta una parte superior plana. La altura del edificio puede no ser precisa.
LOD 2 del edificio
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
tendrá una geometría de mayor fidelidad. Las paredes y los techos de malla coincidirán mejor con la forma del edificio. Es posible que las funciones más pequeñas, como chimeneas o respiraderos del techo, sobresalgan fuera de la malla.
Información sobre ArMesh
ArMesh
es una malla de polígonos que representa una reconstrucción de la superficie de la geometría del paisaje urbano.
Cada ArMesh
incluye un búfer de vértices y un búfer de índice:
ArMesh_getVertexListSize()
Recupera la cantidad de vértices en esta malla.ArMesh_getVertexList()
Obtén las posiciones concatenadas de los vértices de la malla, en coordenadas relativas aArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Recupera la cantidad de índices en esta malla.ArMesh_getIndexList()
Obtén los índices de los vértices que conforman una cara.
Cómo adjuntar contenido de RA a un ArStreetscapeGeometry
Existen dos maneras de adjuntar contenido de RA a la geometría del paisaje urbano:
- Habilita la Profundidad geoespacial y usa una Prueba de posicionamiento de profundidad. Este es el método recomendado y más sencillo.
- Usa
ArTrackable_acquireNewAnchor()
para crear un ancla en una pose determinada unida a unaArStreetscapeGeometry
. Este ancla heredará su estado de seguimiento del elemento superiorArStreetscapeGeometry
.
Realiza una prueba de posicionamiento en ArStreetscapeGeometry
ArFrame_hitTest
se puede usar para realizar pruebas de posicionamiento con la geometría del paisaje urbano. Si se encuentran intersecciones, ArHitResult
contiene información de pose sobre la ubicación de hit y una referencia a ArStreetscapeGeometry
que recibió el hit. Esta geometría del paisaje urbano se puede pasar a ArTrackable_acquireNewAnchor()
para crear un ancla adjunta.
ArHitResultList *hit_result_list = NULL; ArHitResult *hit_result = NULL; ArHitResultList_create(ar_session, &hit_result_list); ArHitResult_create(ar_session, &hit_result); ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list); ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result); ArAnchor *out_anchor = NULL; ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor); CHECK(status == AR_SUCCESS);
Habilita la profundidad geoespacial
La profundidad geoespacial combina la geometría del paisaje urbano. con entradas de sensores locales para mejorar los datos de profundidad. Cuando se habilita la profundidad geoespacial, se modifican la profundidad de salida y las imágenes de profundidad sin procesar para incluir la geometría del paisaje urbano rasterizada, además de la profundidad observada localmente. Esto puede mejorar la precisión de las poses con la profundidad.