Utiliser les bâtiments et le relief qui vous entourent sur iOS

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

Utilisez GARFrame.streetscapeGeometries pour obtenir tous les objets GARStreetscapeGeometry.

Comprendre GARStreetscapeGeometry

GARStreetscapeGeometry contient des informations sur un bâtiment:

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:

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