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 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.

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

Comprende ArStreetscapeGeometry

ArStreetscapeGeometry contiene información sobre un edificio:

Edificio LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_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

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_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 ArMesh

ArMesh es una malla de polígonos que representa una reconstrucción de superficie de la geometría del paisaje urbano. Cada ArMesh incluye un búfer de vértices y un búfer de índices:

Cómo adjuntar contenido de RA a un ArStreetscapeGeometry

Existen dos maneras de adjuntar contenido de RA a Streetscape Geometry:

Realiza una prueba de posicionamiento en ArStreetscapeGeometry.

Se puede usar ArFrame_hitTest para realizar una prueba de posicionamiento en la geometría del paisaje urbano. Si se encuentran intersecciones, ArHitResult contiene información de pose sobre la ubicación del hit, así como una referencia al ArStreetscapeGeometry que se golpeó. 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

Geospatial Depth combina Streetscape Geometry con la entrada del sensor local 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 función Profundidad.