ממשקי ה-API של גיאומטריה של סביבת הרחוב מספקים את הגיאומטריה של פני השטח, הבניינים או מבנים אחרים בסצנה. אפשר להשתמש בגיאומטריה כדי לבצע חסימה, עיבוד או מיקום של תוכן AR באמצעות ממשקי API של בדיקת התאמה. נתוני הגיאומטריה של סביבת הרחוב מתקבלים באמצעות תמונות מ-Google Street View.
ניסיון של הדוגמה
באפליקציה GeospatialExample מוצג איך לקבל גיאומטריות של Streetscape ולייצר להן רינדור.
הגדרת Geospatial API
כדי להשתמש ב-Streetscape Geometry, צריך להגדיר את Geospatial API בפרויקט. פועלים לפי ההוראות במאמר הפעלת Geospatial API כדי להגדיר את Geospatial API.
הפעלת גיאומטריה של סביבת הרחוב
Geospatial API מקבל נתונים של גיאומטריה של סביבת הרחוב כאשר השדה GARGeospatialMode
מוגדר לערך GARGeospatialModeEnabled
והשדה GARStreetscapeGeometryMode
מוגדר לערך GARStreetscapeGeometryModeEnabled
.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
אחזור נתוני גיאומטריה של סביבת הרחוב בסשן ARCore
משתמשים ב-GARFrame.streetscapeGeometries
כדי לקבל את כל האובייקטים מסוג GARStreetscapeGeometry
.
הסבר על GARStreetscapeGeometry
GARStreetscapeGeometry
מכיל מידע על מבנה:
-
GARStreetscapeGeometry.type
הקוד הזה מזהה את StreetscapeGeometry כשטח או כבניין. -
GARStreetscapeGeometry.mesh
קבלת פוליגוןGARMesh
שתואם לשטח או למבנה הזה. -
GARStreetscapeGeometry.meshTransform
תיאור המקור של הגיאומטריה. צריך לבצע טרנספורמציה של כל הנקודות ב-GARMesh
באמצעותGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
הנתונים של איכות המאגר. רמות הפירוט מתוארות בתקן CityGML 2.0.
בניין ברמת פירוט 1
GARStreetscapeGeometryQualityBuildingLOD_1
מורכב משטחי בניין שנמתחים כלפי מעלה עד לחלק העליון השטוח. יכול להיות שהגובה של המבנים לא מדויק.
בניין ברמת פירוט 2
ל-GARStreetscapeGeometryQualityBuildingLOD_2
תהיה גיאומטריה באיכות גבוהה יותר. קירות וגגות רשת יהיו דומים יותר למבנה של הבניין. תכונות קטנות יותר, כמו תנורים או פתחי אוורור בגג, עשויות עדיין להימצא מחוץ לרשת.
הסבר על GARMesh
GARMesh
היא רשת פוליגונים שמייצגת שחזור של פני השטח של גיאומטריה של סביבת הרחוב.
כל GARMesh
כולל מאגר קודקודים ומאגר אינדקסים:
GARMesh.vertexCount
אחזור מספר הנקודות (vertices) ברשת הזו.GARMesh.vertices
קבלת המיקומים המקושרים של קודקודי הרשת, בקואורדינטות ביחס ל-GARStreetscapeGeometry.meshTransform
.GARMesh.triangleCount
אחזור מספר האינדקסים של הרשת.GARMesh.triangles
קבלת האינדקסים של הקודקודים שמרכיבים פנים.
צירוף תוכן AR ל-GARStreetscapeGeometry
משתמשים ב-GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
כדי ליצור עוגן בתנוחה מסוימת ליד GARStreetscapeGeometry.meshTransform
. עוגן זה יקבל בירושה את מצב המעקב מההורה GARStreetscapeGeometry
.
ביצוע בדיקת היתקלות (hit-test) מול GARStreetscapeGeometry
אפשר להשתמש ב-GARSession.raycastStreetscapeGeometry:direction:error:
כדי לבצע בדיקת היתכנות (hit-test) לגיאומטריה של סביבת הרחוב. אם נמצאות צמתים, השדה GARStreetscapeGeometryRaycastResult
מכיל פרטי תנוחה לגבי מיקום ההיט, וכן הפניה ל-GARStreetscapeGeometry
שהוכה. אפשר להעביר את הגיאומטריה של סביבת הרחוב אל GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
כדי ליצור עוגן שמצורף אליה.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];