Utiliser les bâtiments et le relief qui vous entourent sur le NDK Android (C)

Les API Streetscape Geometry fournissent la géométrie du relief, des bâtiments ou d'autres structures d'une scène. La géométrie peut être utilisée pour l'occlusion, l'affichage ou le placement de contenu RA via des API de test de positionnement. Les données Streetscape Geometry sont obtenues grâce aux images Google Street View.

Configurer l'API Geospatial

Pour utiliser Streetscape Geometry, vous devez configurer l'API Geospatial dans votre projet. Suivez les instructions de la section Activer l'API Geospatial pour configurer l'API Geospatial.

Activer Streetscape Geometry

L'API Geospatial obtient les données Streetscape Geometry lorsque ArGeospatialMode est défini sur ArGeospatialModeEnabled et ArStreetscapeGeometryMode sur 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);

Obtenir une géométrie Streetscape dans une session ARCore

Utilisez ArSession_getAllTrackables() et AR_TRACKABLE_STREETSCAPE_GEOMETRY pour filtrer les résultats.

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

Comprendre ArStreetscapeGeometry

ArStreetscapeGeometry contient des informations sur un bâtiment:

Bâtiment LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 correspond à l'empreinte de bâtiment extrudée vers le haut sur une surface plane. La hauteur des bâtiments peut être inexacte.

Bâtiment LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 présente une géométrie plus fidèle. Les murs et les toits en maille se rapprochent de la forme du bâtiment. Les éléments plus petits, comme les cheminées ou les ouvertures de toit, peuvent quand même percer à l'extérieur du maillage.

Comprendre ArMesh

ArMesh est un maillage polygonal représentant une reconstruction de la surface de la géométrie Streetscape. Chaque ArMesh comprend un tampon de sommets et un tampon d'index:

Joindre du contenu en RA à un ArStreetscapeGeometry

Il existe deux façons d'associer du contenu RA à Streetscape Geometry:

Effectuer un test de positionnement sur ArStreetscapeGeometry

ArFrame_hitTest peut être utilisé pour effectuer des tests de positionnement par rapport à la géométrie Streetscape. Si des intersections sont détectées, ArHitResult contient des informations de pose sur le lieu de l'appel, ainsi qu'une référence à la ArStreetscapeGeometry qui a été appelée. Cette géométrie de paysage Streetscape peut être transmise à ArTrackable_acquireNewAnchor() pour créer une ancre associée.

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

Activer la profondeur géospatiale

Geospatial Depth (Profondeur géospatiale) combine la géométrie Streetscape avec l'entrée d'un capteur local pour améliorer les données de profondeur. Lorsque la profondeur géospatiale est activée, les images de profondeur de sortie et de profondeur brute sont modifiées pour inclure la géométrie Streetscape rastérisée en plus de la profondeur observée localement. Cela peut améliorer la précision des postures en utilisant la profondeur.