Les API Streetscape Geometry fournissent la géométrie du terrain, 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. Pour configurer l'API Geospatial, suivez les instructions de la section Activer l'API Geospatial.
Activer la géométrie de paysage urbain
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
UtilisezArSession_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:
-
ArStreetscapeGeometry_getType()
Indique si StreetscapeGeometry est un terrain ou un bâtiment. -
ArStreetscapeGeometry_acquireMesh()
Obtenez un polygoneArMesh
correspondant à ce relief ou bâtiment. -
ArStreetscapeGeometry_getMeshPose()
Décrit l'origine de la géométrie. Tous les points duArMesh
doivent être transformés parArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Fournit la qualité des données du réseau maillé. Les niveaux de détail sont décrits dans la norme CityGML 2.0.
Bâtiment LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
se compose de surfaces au sol de bâtiments extrudées vers le haut jusqu'à un sommet plat. La hauteur des bâtiments peut être inexacte.
Niveau de détail 2 du bâtiment
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 surface de la géométrie du paysage urbain.
Chaque ArMesh
inclut un tampon de sommets et un tampon d'indices :
ArMesh_getVertexListSize()
Récupère le nombre de sommets dans ce maillage.ArMesh_getVertexList()
Obtient les positions concatenantes des sommets du maillage, en coordonnées par rapport àArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Récupère le nombre d'indices dans ce maillage.ArMesh_getIndexList()
Obtenez les indices des sommets qui constituent une face.
Joindre du contenu en RA à un ArStreetscapeGeometry
Il existe deux façons d'associer du contenu RA à Streetscape Geometry:
- Activez Geospatial Depth et utilisez un test de positionnement de profondeur. Il s'agit de la méthode la plus simple et recommandée.
- Utilisez
ArTrackable_acquireNewAnchor()
pour créer un ancrage à une pose donnée associé à unArStreetscapeGeometry
. Cet ancrage héritera de l'état de suivi de l'élément parentArStreetscapeGeometry
.
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 sur la pose concernant l'emplacement de la collision, ainsi qu'une référence à l'élément ArStreetscapeGeometry
qui a été touché. 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 Geospatial Depth
Geospatial Depth combine Streetscape Geometry avec l'entrée des capteurs locaux 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 poses avec la profondeur.