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 elementuGARFrame.streetscapeGeometries
, aby uzyskać wszystkie obiekty GARStreetscapeGeometry
.
GARStreetscapeGeometry
GARStreetscapeGeometry
zawiera informacje o budynku:
-
GARStreetscapeGeometry.type
Identyfikuje geometrię ulicy jako teren lub budynek. -
GARStreetscapeGeometry.mesh
Uzyskaj wielokątGARMesh
odpowiadający temu rodzajowi terenu lub budynkowi. -
GARStreetscapeGeometry.meshTransform
Określa początek układu geometrycznego. Wszystkie punkty wGARMesh
powinny zostać przekształcone za pomocąGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
Pozwala określić jakość danych siatki. Poziomy szczegółowości są opisane w standardzie CityGML 2.0.
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:
GARMesh.vertexCount
Zwraca liczbę wierzchołków w tej siatce.GARMesh.vertices
Uzyskaj złączone pozycje wierzchołków siatki w swoich współrzędnych względemGARStreetscapeGeometry.meshTransform
.GARMesh.triangleCount
Pobiera liczbę indeksów w tej siatce.GARMesh.triangles
Uzyskaj indeksy wierzchołków, które tworzą powierzchnię.
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];