Usa edificios y terrenos a tu alrededor en el NDK de Android (C)

Las APIs de Streetscape Geometry proporcionan la geometría del terreno, los edificios y otras estructuras en 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

Usa ArSession_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);

Información sobre ArStreetscapeGeometry

ArStreetscapeGeometry contiene información sobre un edificio:

Nivel de detalle 1 del edificio

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 consiste en situaciones de edificios extruidas hacia arriba hasta una superficie plana. La altura del edificio puede no ser precisa.

Nivel de detalle 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:

Adjunta contenido de RA a un ArStreetscapeGeometry

Existen dos maneras de adjuntar contenido de RA a la geometría del paisaje urbano:

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 del 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);

Cómo habilitar 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 la profundidad geoespacial está habilitada, las imágenes de profundidad y profundidad sin procesar de salida se modifican para incluir la geometría del paisaje urbano rasterizado además de la profundidad observada a nivel local. Esto puede mejorar la precisión de las poses con la profundidad.