Les API Streetscape Geometry fournissent la géométrie du relief, des bâtiments ou d'autres structures dans une scène. La géométrie peut être utilisée pour l'occlusion, l'affichage ou le placement de contenu en 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 des données Streetscape Geometry lorsque ArGeospatialMode
est défini sur ArGeospatialModeEnabled
et ArStreetscapeGeometryMode
est défini 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 Streetscape Geometry 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()
Identifie la StreetscapeGeometry en tant que relief ou en tant que bâtiment. -
ArStreetscapeGeometry_acquireMesh()
Obtenez un polygoneArMesh
correspondant à ce relief ou ce bâtiment. -
ArStreetscapeGeometry_getMeshPose()
Décrit l'origine de la géométrie. Tous les points deArMesh
doivent être transformés parArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Fournit la qualité des données du maillage. Les niveaux de détail sont décrits dans la norme CityGML 2.0.
Bâtiment LOD 1
Le AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
consiste en une empreinte de pas de bâtiment extrudée vers le haut vers une surface plane. La hauteur des bâtiments peut être inexacte.
Le LOD du bâtiment 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
aura une géométrie de plus grande fidélité. Les murs et les toits recouverts de maillages correspondront mieux à la forme du bâtiment. Les éléments de petite taille, comme les cheminées ou les ouvertures de toit, peuvent toujours apparaître à l'extérieur de la grille.
Comprendre ArMesh
ArMesh
est un maillage polygonal représentant une reconstitution de surface de la géométrie du paysage urbain.
Chaque ArMesh
inclut un tampon de sommet et un tampon d'index:
ArMesh_getVertexListSize()
Récupère le nombre de sommets dans ce maillage.ArMesh_getVertexList()
Obtenez les positions concaténées des sommets du maillage, en coordonnées par rapport àArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Récupère le nombre d'indices de ce maillage.ArMesh_getIndexList()
Obtenez les index des sommets qui composent une face.
Joindre du contenu RA à un ArStreetscapeGeometry
Il existe deux façons d'associer du contenu RA à Streetscape Geometry:
- Activez Geospatial Depth et utilisez un test de hit de profondeur. Il s'agit de la méthode recommandée, qui est la plus simple.
- Utilisez
ArTrackable_acquireNewAnchor()
pour créer une ancre pour une pose donnée associée à unArStreetscapeGeometry
. Cette ancre héritera de son état de suivi de l'élément parentArStreetscapeGeometry
.
Effectuer un test de positionnement sur ArStreetscapeGeometry
ArFrame_hitTest
permet d'effectuer des tests sur Streetscape Geometry. Si des intersections sont détectées, ArHitResult
contient des informations sur l'emplacement de l'appel, ainsi qu'une référence au ArStreetscapeGeometry
qui a été appelé. Cette géométrie de paysage Streetscape peut être transmise à ArTrackable_acquireNewAnchor()
pour créer une ancre.
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
La fonctionnalité Geospatial Depth combine la géométrie du paysage urbain avec les données d'entrée des capteurs locaux pour améliorer les données de profondeur. Lorsque Geospatial Depth est activé, les images de profondeur de sortie et de profondeur brutes sont modifiées pour inclure la géométrie du paysage urbain rastérisée en plus de la profondeur observée localement. Cela peut améliorer la précision des postures en utilisant la profondeur.