Korzystanie z budynków i terenu wokół siebie na urządzeniach z iOS

Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych struktur w scenie. Geometria może służyć do zasłonięcia, renderowania lub umieszczania treści AR za pomocą interfejsów API testowania kolizji. Dane geometryczne dotyczące ulicy są uzyskiwane na podstawie zdjęć Google Street View.

Wypróbuj przykład

Aplikacja GeospatialExample pokazuje, jak pobierać i renderować geometrie Streetscape.

Konfigurowanie interfejsu Geospatial API

Aby korzystać z geometrii Streetscape, musisz skonfigurować interfejs Geospatial API w projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje dotyczące włączania interfejsu Geospatial API.

Włączanie geometrii Streetscape

Interfejs Geospatial API uzyskuje dane geometrii Streetscape, gdy parametr GARGeospatialMode ma wartość GARGeospatialModeEnabled, a parametr GARStreetscapeGeometryMode ma wartość GARStreetscapeGeometryModeEnabled.

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];

Pobieranie geometrii Streetscape w sesji ARCore

Użyj elementu GARFrame.streetscapeGeometries, aby uzyskać wszystkie obiekty GARStreetscapeGeometry.

GARStreetscapeGeometry

GARStreetscapeGeometry zawiera informacje o budynku:

Budynek LOD 1

GARStreetscapeGeometryQualityBuildingLOD_1 składa się z wypukłych rzutów poziomych budynku, które kończą się płaskim szczytem. Wysokość budynków może być niedokładna.

Budynek LOD 2

GARStreetscapeGeometryQualityBuildingLOD_2 będzie mieć geometrię o wyższej jakości. Siatka na ścianach i dachach będzie lepiej dopasowana do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory wentylacyjne w dachu, mogą wystawać poza siatkę.

GARMesh

GARMesh to wielokątna siatka reprezentująca odtworzenie powierzchni geometrii ulicy. Każdy element GARMesh zawiera bufor wierzchołków i bufor indeksów:

Załączanie treści AR do GARStreetscapeGeometry

Użyj GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:, aby utworzyć kotwicę w danej pozie w pobliżu GARStreetscapeGeometry.meshTransform. Ten kotwnik odziedziczy stan śledzenia z poziomu elementu nadrzędnego GARStreetscapeGeometry.

Przeprowadź test trafień w przypadku GARStreetscapeGeometry

GARSession.raycastStreetscapeGeometry:direction:error: można użyć do przetestowania dopasowania do geometrii Streetscape. Jeśli znaleziono punkty przecięcia, GARStreetscapeGeometryRaycastResult zawiera informacje o miejscu uderzenia oraz odniesienie do GARStreetscapeGeometry, które zostało uderzenie. Geometrię ulicy można przekazać do GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:, aby utworzyć do niej dołączoną kotwicę.

NSArray<GARStreetscapeGeometryRaycastResult *> *results =
    [session raycastStreetscapeGeometry:arRaycastQuery.origin
                              direction:arRaycastQuery.direction
                                  error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
                                 transform:results[0].worldTransform
                                     error:&error];