ממשקי ה-API של גיאומטריה של סביבת הרחוב מספקים את הגיאומטריה של פני השטח, הבניינים או מבנים אחרים בסצנה. אפשר להשתמש בגיאומטריה כדי לבצע חסימה, עיבוד או מיקום של תוכן AR באמצעות ממשקי API של בדיקת התאמה. נתוני הגיאומטריה של סביבת הרחוב מתקבלים באמצעות תמונות מ-Google Street View.
הגדרת Geospatial API
כדי להשתמש ב-Streetscape Geometry, צריך להגדיר את Geospatial API בפרויקט. פועלים לפי ההוראות במאמר הפעלת Geospatial API כדי להגדיר את Geospatial API.
הפעלת גיאומטריה של סביבת הרחוב
Geospatial API מקבל נתונים של גיאומטריה של סביבת הרחוב כאשר השדה ArGeospatialMode
מוגדר לערך ArGeospatialModeEnabled
והשדה ArStreetscapeGeometryMode
מוגדר לערך ArStreetscapeGeometryModeEnabled
.
// Create a session config. ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); // Enable the Geospatial API. ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Enable Streetscape Geometry. ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Release config resources. ArConfig_destroy(ar_config);
אחזור נתוני גיאומטריה של סביבת הרחוב בסשן ARCore
משתמשים ב-ArSession_getAllTrackables()
וב-AR_TRACKABLE_STREETSCAPE_GEOMETRY
כדי לסנן את התוצאות.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
הסבר על ArStreetscapeGeometry
ArStreetscapeGeometry
מכיל מידע על מבנה:
-
ArStreetscapeGeometry_getType()
הקוד הזה מזהה את StreetscapeGeometry כשטח או כבניין. -
ArStreetscapeGeometry_acquireMesh()
קבלת פוליגוןArMesh
שתואם לשטח או למבנה הזה. -
ArStreetscapeGeometry_getMeshPose()
תיאור המקור של הגיאומטריה. צריך לבצע טרנספורמציה של כל הנקודות ב-ArMesh
באמצעותArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
הנתונים של איכות המאגר. רמות הפירוט מתוארות בתקן CityGML 2.0.
בניין ברמת פירוט 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
מורכב משטחי בניין שנמתחים כלפי מעלה עד לחלק העליון השטוח. יכול להיות שהגובה של המבנים לא מדויק.
בניין ברמת פירוט 2
ל-AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
תהיה גיאומטריה באיכות גבוהה יותר. קירות וגגות רשת יהיו דומים יותר למבנה של הבניין. תכונות קטנות יותר, כמו תנורים או פתחי אוורור בגג, עשויות עדיין להימצא מחוץ לרשת.
הסבר על ArMesh
ArMesh
היא רשת פוליגונים שמייצגת שחזור של פני השטח של גיאומטריה של סביבת הרחוב.
כל ArMesh
כולל מאגר קודקודים ומאגר אינדקסים:
ArMesh_getVertexListSize()
אחזור מספר הנקודות (vertices) ברשת הזו.ArMesh_getVertexList()
קבלת המיקומים המקושרים של קודקודי הרשת, בקואורדינטות ביחס ל-ArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
אחזור מספר האינדקסים של הרשת.ArMesh_getIndexList()
קבלת האינדקסים של הקודקודים שמרכיבים פנים.
צירוף תוכן AR ל-ArStreetscapeGeometry
יש שתי דרכים לצרף תוכן AR לגיאומטריה של סביבת הרחוב:
- מפעילים את העומק הגיאוגרפית-מרחבי ומשתמשים בבדיקת היטים של עומק. זו השיטה המומלצת והקלה יותר.
- משתמשים ב-
ArTrackable_acquireNewAnchor()
כדי ליצור עוגן בתנוחה נתונה שמצורפת ל-ArStreetscapeGeometry
. עוגן זה יקבל בירושה את מצב המעקב מההורהArStreetscapeGeometry
.
ביצוע בדיקת היתקלות (hit-test) מול ArStreetscapeGeometry
אפשר להשתמש ב-ArFrame_hitTest
כדי לבצע בדיקת היתכנות (hit-test) לגיאומטריה של סביבת הרחוב. אם נמצאות צמתים, השדה ArHitResult
מכיל פרטי תנוחה לגבי מיקום ההיט, וכן הפניה ל-ArStreetscapeGeometry
שהוכה. אפשר להעביר את הגיאומטריה של סביבת הרחוב אל ArTrackable_acquireNewAnchor()
כדי ליצור עוגן שמצורף אליה.
ArHitResultList *hit_result_list = NULL; ArHitResult *hit_result = NULL; ArHitResultList_create(ar_session, &hit_result_list); ArHitResult_create(ar_session, &hit_result); ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list); ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result); ArAnchor *out_anchor = NULL; ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor); CHECK(status == AR_SUCCESS);
הפעלת עומק גיאו-מרחבי
עומק גיאו-מרחבי משלב בין גיאומטריה של סביבת הרחוב לבין קלט של חיישנים מקומיים כדי לשפר את נתוני העומק. כשמפעילים את התכונה 'עומק גיאו-מרחבי', עומק הפלט ותמונות העומק הגולמיות משתנים כך שיכללו גיאומטריה של סביבת הרחוב בפורמט רסטר, בנוסף לעומק שנצפה באופן מקומי. כך ניתן לשפר את הדיוק של תנוחות באמצעות התכונה 'עומק'.