שימוש במבנים ובפני השטח בסביבתך ב-Android NDK (C)

ממשקי ה-API של גיאומטריה של סביבת הרחוב מספקים את הגיאומטריה של פני השטח, הבניינים או מבנים אחרים בסצנה. אפשר להשתמש בגיאומטריה לצורך חסימה, רינדור או מיקום של תוכן AR באמצעות ממשקי API לבדיקת היט. נתוני הגיאומטריה של סביבת הרחוב מתקבלים באמצעות תמונות מ-Google Street View.

הגדרת ה-API גיאו-מרחבי

כדי להשתמש ב-Streetscape Geometry, צריך להגדיר את Geospatial API בפרויקט. פועלים לפי ההוראות במאמר הפעלת Geospatial API כדי להגדיר את Geospatial API.

הפעלת גיאומטריה של סביבת הרחוב

ה-Geospatial API מקבל נתוני Streetscape Geometry כאשר 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);

קבלת גיאומטריה של Streetscape בסשן 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 מכיל מידע על מבנה:

מבנה LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 מורכב מטביעות רגליים של מבנים מובלטות למעלה עד לראש שטוח. יכול להיות שגובה המבנים לא מדויק.

מבנה LOD 2

ל-AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 תהיה גיאומטריה באיכות גבוהה יותר. קירות וגגות הרשת יתאימו בצורה מדויקת יותר לצורת הבניין. תכונות קטנות יותר, כמו תנורים או פתחי אוורור בגג, עשויות עדיין לבלוט מחוץ לרשת.

הסבר על ArMesh

ArMesh היא רשת פוליגונים שמייצגת שחזור של פני השטח של גיאומטריה של סביבת הרחוב. כל ArMesh כולל מאגר נתונים זמני של קודקוד ומאגר נתונים זמני של אינדקס:

לצרף תוכן AR אל ArStreetscapeGeometry

יש שתי דרכים לצרף תוכן AR לגיאומטריה של Streetscape:

ביצוע בדיקת היט מול ArStreetscapeGeometry

אפשר להשתמש בפרמטר ArFrame_hitTest כדי לבצע בדיקה מול גיאומטריה של Streetscape. אם נמצאות צמתים, השדה ArHitResult מכיל פרטי תנוחה לגבי מיקום ההיט, וכן הפניה ל-ArStreetscapeGeometry שהוכה. ניתן להעביר את הגיאומטריה של Streetscape אל 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);

הפעלת עומק גיאו-מרחבי

התכונה עומק גיאו-מרחבי משלבת בין גיאומטריה של סביבת הרחוב לבין קלט של חיישנים מקומיים כדי לשפר את נתוני העומק. כשמפעילים את התכונה 'עומק גיאו-מרחבי', עומק הפלט ותמונות העומק הגולמיות משתנים כך שיכללו גיאומטריה של סביבת הרחוב בפורמט רסטר, בנוסף לעומק שנצפה באופן מקומי. כך אפשר לשפר את הדיוק של תנוחות בעזרת עומק.