ממשקי ה-API לגיאומטריה של Streetscape מספקים את הגיאומטריה של פני השטח, בניינים או מבנים אחרים בסצנה. ניתן להשתמש בגאומטריה להסתרה, לעיבוד או למיקום של תוכן AR באמצעות ממשקי API לבדיקת תקינות. נתונים גיאומטריים של Streetscape מתקבלים מתמונות Google Street View.
רוצה לנסות את הדוגמה?
האפליקציה לדוגמה גיאו-מרחבית מדגימה איך לקבל ולעבד צורות גיאומטריות ב-Streetscape.
הגדרת ה-API הגיאו-מרחבי
כדי להשתמש בגיאומטריה של Streetscape, עליכם להגדיר את ה-Geospatial API בפרויקט שלכם. מבצעים את ההוראות להפעלת ה-API הגאו-מרחבי כדי להגדיר את ה-Geospatial API.
הפעלת גיאומטריית Streetscape
ה-API הגיאו-מרחבי מקבל נתונים גיאומטריים של Streetscape כאשר הערך של GeospatialMode
הוא GeospatialMode.Enabled
ו-StreetscapeGeometryMode
מוגדר ל-StreetscapeGeometryMode.Enabled
.
קבלת גיאומטריה של Streetscape בסשן ARCore
הוספת רכיבARStreetscapeGeometryManager
ל-GameObject
. כאשר מוסיפים, מעדכנים או מסירים גיאומטרי של Streetscape, האירוע ARStreetscapeGeometryManager.StreetscapeGeometriesChanged
מופעל.
public Material streetscapeGeometryMaterial;
List<ARStreetscapeGeometry> _addedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _updatedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _removedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
public void OnEnable()
{
StreetscapeGeometryManager.StreetscapeGeometriesChanged +=
GetStreetscapeGeometry;
}
public void Update() {
foreach (ARStreetscapeGeometry streetscapegeometry in _addedStreetscapeGeometries)
{
GameObject renderObject = new GameObject(
"StreetscapeGeometryMesh", typeof(MeshFilter), typeof(MeshRenderer));
if (renderObject)
{
renderObject.transform.position = streetscapegeometry.pose.position;
renderObject.transform.rotation = streetscapegeometry.pose.rotation;
renderObject.GetComponent<MeshFilter>().mesh = streetscapegeometry.mesh;
renderObject.GetComponent<MeshRenderer>().material = streetscapeGeometryMaterial;
}
}
}
public void OnDisable()
{
StreetscapeGeometryManager.StreetscapeGeometriesChanged -=
GetStreetscapeGeometry;
}
private void GetStreetscapeGeometry(ARStreetscapeGeometriesChangedEventArgs eventArgs)
{
_addedStreetscapeGeometries = eventArgs.Added;
_updatedStreetscapeGeometries = eventArgs.Updated;
_removedStreetscapeGeometries = eventArgs.Removed;
}
להבין את ARStreetscapeGeometry
ARStreetscapeGeometry
מכיל מידע על מבנה:
-
ARStreetscapeGeometry.streetscapeGeometryType
זיהוי של StreetscapeGeometry כפני שטח או כבניין. -
ARStreetscapeGeometry.mesh
צריך ליצור פוליגוןMesh
שתואם לפני השטח או לבניין הזה. -
ARStreetscapeGeometry.quality
האיכות של נתוני הרשת. רמות הפירוט מתוארות בתקן CityGML 2.0.
מבנה LOD 1
BuildingLOD1
מורכב מטביעות רגליים של בניינים שנמתחות למעלה אל חלק עליון שטוח. גובה המבנים עשוי להיות לא מדויק.
מבנה LOD 2
ל-BuildingLOD2
תהיה גאומטריה באיכות גבוהה יותר. קירות וגגות הרשת יתאימו יותר לצורת המבנה. פריטים קטנים יותר, כמו ארובות או פתחי אוורור בגג, עדיין עשויים לחדור מחוץ לרשת.
להבין את Mesh
Mesh
היא רשת פוליגונים שמייצגת שחזור של פני השטח של גיאומטריית Streetscape.
לעיון בMesh
ובMeshRenderer
. חשוב לשים לב שהנורמליות לא מחושבות כברירת מחדל. כדי לחשב אותן, אפשר לעיין ב-Mesh.RecalculateNormals()
.
צירוף תוכן AR אל ARStreetscapeGeometry
אפשר להשתמש ב-ARAnchorManager.AddAnchor()
כדי ליצור עוגן בתנוחה נתונה ליד קודקודים בARStreetscapeGeometry.mesh
. מצב המעקב הזה יקבל בירושה את מצב המעקב מתבנית ההורה ARStreetscapeGeometry
.
בדיקת היט על ARStreetscapeGeometry
הפונקציה ARRaycastManagerExtensions.RaycastStreetscapeGeometry
יכולה לשמש לבדיקה של גיאומטריה ב-Streetscape. אם יימצאו צמתים, XRRaycastHit
מכיל את פרטי התנוחה לגבי מיקום ההתאמה וגם הפניה ל-ARStreetscapeGeometry
שהתקבל. ניתן להעביר גיאומטריית Streetscape זו אל ARAnchorManager.AddAnchor()
כדי לצרף אליה עוגן.
Vector2 screenTapPosition = Input.GetTouch(0).position;
List<XRRaycastHit> hitResults = new List<XRRaycastHit>();
if (RaycastManager.RaycastStreetscapeGeometry(screenTapPosition, ref hitResults)){
ARStreetscapeGeometry streetscapegeometry =
StreetscapeGeometryManager.GetStreetscapeGeometry(hitResults[0].trackableId);
if (streetscapegeometry != null)
{
ARAnchor anchor = StreetscapeGeometryManager.AttachAnchor(streetscapegeometry, hitResults[0].pose);
}
}
הפעלת 'עומק גיאו-מרחבי'
המדד עומק גיאו-מרחבי משלב גיאומטריה של Streetscape עם קלט מחיישנים מקומיים כדי לשפר את נתוני העומק. כשמפעילים את התכונה 'עומק גיאו-מרחבי', תמונות העומק ועומק הפלט משתנים כך שיכללו גיאומטריית Streetscape שעברה רסטר, בנוסף לנתוני העומק המקומיים. הפעולה הזו יכולה לשפר את הדיוק של התנוחות באמצעות העומק.