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, le rendu ou le placement de contenu RA via des API de test de collision. Les données de géométrie du paysage urbain sont obtenues à partir des images Google Street View.
Essayer l'exemple
L'application GeospatialExample montre comment obtenir et afficher des géométries de paysage urbain.
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 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 de paysage urbain dans une session ARCore
UtilisezGARFrame.streetscapeGeometries
pour obtenir tous les objets GARStreetscapeGeometry
.
Comprendre GARStreetscapeGeometry
GARStreetscapeGeometry
contient des informations sur un bâtiment:
-
GARStreetscapeGeometry.type
Indique si StreetscapeGeometry est un terrain ou un bâtiment. -
GARStreetscapeGeometry.mesh
Obtenez un polygoneGARMesh
correspondant à ce terrain ou à ce bâtiment. -
GARStreetscapeGeometry.meshTransform
décrit l'origine de la géométrie. Tous les points deGARMesh
doivent être transformés parGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
Indique la qualité des données de maillage. Les niveaux de détail sont décrits dans la norme CityGML 2.0.
Niveau de détail 1 du bâtiment
GARStreetscapeGeometryQualityBuildingLOD_1
se compose de surfaces au sol de bâtiments extrudées vers le haut jusqu'à un sommet plat. Les hauteurs des bâtiments peuvent être inexactes.
Niveau de détail 2 du bâtiment
GARStreetscapeGeometryQualityBuildingLOD_2
aura une géométrie plus fidèle. Les murs et les toits en réseau maillé correspondent plus précisément à la forme du bâtiment. Les éléments plus petits, comme les cheminées ou les bouches d'aération du toit, peuvent toujours dépasser du maillage.
Comprendre GARMesh
GARMesh
est un maillage polygonal représentant une reconstruction de surface de la géométrie du paysage urbain.
Chaque GARMesh
inclut un tampon de sommets et un tampon d'indices:
GARMesh.vertexCount
Récupère le nombre de sommets de ce maillage.GARMesh.vertices
Obtient les positions concatenantes 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
Obtenez les indices des sommets qui constituent une face.
Joindre du contenu RA à un GARStreetscapeGeometry
Utilisez GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
pour créer un ancrage à une pose donnée à proximité de GARStreetscapeGeometry.meshTransform
. Cet ancrage héritera de l'é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 un test de positionnement sur la géométrie du paysage urbain. Si des intersections sont détectées, GARStreetscapeGeometryRaycastResult
contient des informations sur la pose concernant l'emplacement de la collision, ainsi qu'une référence à l'élément GARStreetscapeGeometry
qui a été touché. Cette géométrie Streetscape peut être transmise à GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
pour créer un ancrage qui y est associé.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];