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.
Essayer l'exemple
L'application GeospatialExample montre comment obtenir et afficher les géométries Streetscape Geometries.
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 GARGeospatialMode
est défini sur GARGeospatialModeEnabled
et GARStreetscapeGeometryMode
sur GARStreetscapeGeometryModeEnabled
.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Obtenir une géométrie Streetscape dans une session ARCore
UtilisezGARFrame.streetscapeGeometries
pour obtenir tous les objets GARStreetscapeGeometry
.
Comprendre GARStreetscapeGeometry
GARStreetscapeGeometry
contient des informations sur un bâtiment:
-
GARStreetscapeGeometry.type
Identifie la géométrie StreetscapeGeometry en tant que relief ou bâtiment. -
GARStreetscapeGeometry.mesh
Obtenez un polygoneGARMesh
correspondant à ce relief ou bâtiment. -
GARStreetscapeGeometry.meshTransform
Décrit l'origine de la géométrie. Tous les points duGARMesh
doivent être transformés parGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
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
GARStreetscapeGeometryQualityBuildingLOD_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
GARStreetscapeGeometryQualityBuildingLOD_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 GARMesh
GARMesh
est un maillage polygonal représentant une reconstruction de la surface de la géométrie Streetscape.
Chaque GARMesh
comprend un tampon de sommets et un tampon d'index:
GARMesh.vertexCount
Récupère le nombre de sommets dans ce maillage.GARMesh.vertices
Obtenir les positions concaténées des sommets du maillage, en coordonnées par rapport àGARStreetscapeGeometry.meshTransform
GARMesh.triangleCount
Récupère le nombre d'indices dans ce maillage.GARMesh.triangles
Permet d'obtenir les index des sommets qui composent une face.
Joindre du contenu en RA à un GARStreetscapeGeometry
Utilisez GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
pour créer une ancre à une position donnée près de GARStreetscapeGeometry.meshTransform
. Cette ancre héritera de son état de suivi de l'élément parent GARStreetscapeGeometry
.
Effectuer un test de positionnement sur GARStreetscapeGeometry
GARSession.raycastStreetscapeGeometry:direction:error:
peut être utilisé pour effectuer des tests de positionnement par rapport à la géométrie Streetscape. Si des intersections sont détectées, GARStreetscapeGeometryRaycastResult
contient des informations de pose sur le lieu de l'appel, ainsi qu'une référence à la GARStreetscapeGeometry
qui a été appelée. Cette géométrie de paysage Streetscape peut être transmise à GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
pour créer une ancre associée.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];