XR_ANDROID_geospatial
מחרוזת שם
XR_ANDROID_geospatial
סוג התוסף
הרחבת המכונה
מספר שלוחה רשום
790
Revision
1
סטטוס האישור
לא אושר
תלות בתוסף ובגרסה
XR_EXT_future
תאריך השינוי האחרון
2025-12-18
סטטוס כתובת ה-IP
לא ידוע על תלונות על הפרת זכויות יוצרים שקשורות לכתובות IP.
שותפים ביצירת התוכן
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
סקירה כללית
התוסף הזה מספק מעקב גיאו-מרחבי עבור Geospatial API של Google, שמאפשר מיקום גיאוגרפי מדויק וקביעת אוריינטציה, ומאפשר לאפליקציה למקם תוכן ביחס לכדור הארץ. השילוב הזה מתבצע באמצעות מעקב תנועה, GPS וחיישנים אחרים, וגם באמצעות מערכת מיקום חזותי (VPS) של Google. מערכת VPS משווה בין תמונות ממצלמת המכשיר לבין תמונות Street View כדי לקבוע מיקום מדויק ואת הכיוון. Geospatial API מספק לרוב דיוק מיקום ברמת תת-מטר (סדרי גודל טובים יותר מ-GPS) ודיוק אוריינטציה ברמת תת-מעלה.
כדי להשתמש בממשקי ה-API בתוסף הזה (מלבד בדיקת התמיכה בתוסף), האפליקציה חייבת להגדיר בהצלחה פרטי אימות באמצעות מנגנון כלשהו, כמו XR_ANDROID_google_cloud_auth . בתיעוד של תוסף האימות מופיעים פרטים נוספים על ההגדרה ועל תוצאות השגיאות.
הרשאות
באפליקציות ל-Android חובה לציין את ההרשאה android.permission.ACCESS_FINE_LOCATION במניפסט כדי להשתמש בתוסף הזה. ההרשאה android.permission.ACCESS_FINE_LOCATION נחשבת להרשאה מסוכנת. האפליקציה חייבת לבקש את ההרשאה בזמן הריצה כדי להשתמש בפונקציות האלה:
(רמת ההגנה: מסוכן)
בדיקת יכולות המערכת
המבנה XrSystemGeospatialPropertiesANDROID מוגדר כך:
typedef struct XrSystemGeospatialPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. לא מוגדרים מבנים כאלה ב-OpenXR או בתוסף הזה. -
supportsGeospatialהואXrBool32, שמציין אם המערכת הנוכחית תומכת בתכונות גיאו-מרחביות.
אפליקציה יכולה לבדוק אם המערכת תומכת בתכונות גיאו-מרחביות על ידי שרשור מבנה XrSystemGeospatialPropertiesANDROID אל XrSystemProperties כשקוראים ל-xrGetSystemProperties .
אם סביבת זמן ריצה מחזירה XR_FALSE עבור supportsGeospatial , המערכת לא תומכת בתכונות גיאו-מרחביות, ולכן הפונקציה must מחזירה XR_ERROR_FEATURE_UNSUPPORTED מהפונקציה xrCreateGeospatialTrackerANDROID . באפליקציה צריך להימנע משימוש בפונקציות גיאוספציאליות כשהערך של supportsGeospatial הוא XR_FALSE .
שימוש תקף (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_geospatialלפני שמשתמשים ב-XrSystemGeospatialPropertiesANDROID -
typeחייב להיותXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
יצירת שם של כלי למעקב גיאוגרפי
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
הפונקציה xrCreateGeospatialTrackerANDROID מוגדרת כך:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
תיאורים של פרמטרים
-
sessionהוא XrSession שבו הגשש הגיאוספציאלי יהיה פעיל. -
createInfoהוא מצביע למבנה XrGeospatialTrackerCreateInfoANDROID שמציין פרמטרים ראשוניים של מעקב גיאוגרפי. -
geospatialTrackerOutputהוא מצביע ל-handle שבו מוחזר XrGeospatialTrackerANDROID שנוצר.
אפליקציה יכולה ליצור נקודת אחיזה של XrGeospatialTrackerANDROID על ידי קריאה ל-xrCreateGeospatialTrackerANDROID . אפשר להשתמש בהמשך ב-handle XrGeospatialTrackerANDROID שמוחזר בקריאות ל-API. אם האפליקציה לא קיבלה את ההרשאות הנדרשות, סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_PERMISSION_INSUFFICIENT . יכול להיות רק XrGeospatialTrackerANDROID אחד בכל פעם עבור XrSession מסוים . האפליקציה חייבת לוודא שכל האובייקטים הקודמים של XrGeospatialTrackerANDROID הושמדו לפני הפעלת הפונקציה הזו שוב, אחרת זמן הריצה חייב להחזיר את הערך XR_ERROR_LIMIT_REACHED . אם יצירת אמצעי המעקב תצליח, הוא יעבור בהתחלה למצב XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID , והאפליקציה חייבת להמתין עד שהמצב ישתנה ל-XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID לפני השימוש באמצעי המעקב. מידע נוסף זמין במאמר בנושא XrEventDataGeospatialTrackerStateChangedANDROID . אם האפליקציה מעבירה XrGeospatialTrackerANDROID שלא נמצא במצב XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID לפונקציה שדורשת אותו, זמן הריצה חייב להחזיר XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID .
חובה לשחרר בסופו של דבר את ה-handle XrGeospatialTrackerANDROID באמצעות הפונקציה xrDestroyGeospatialTrackerANDROID.
שימוש תקף (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_geospatialלפני הקריאה ל-xrCreateGeospatialTrackerANDROID -
sessionחייב להיות מאחז XrSession תקין -
createInfomust be a pointer to a valid XrGeospatialTrackerCreateInfoANDROID structure -
geospatialTrackerOutputחייב להיות מצביע ל-handle של XrGeospatialTrackerANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
המבנה XrGeospatialTrackerCreateInfoANDROID מוגדר כך:
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים.
שימוש תקף (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_geospatialלפני שמשתמשים ב-XrGeospatialTrackerCreateInfoANDROID -
typeחייב להיותXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים . ראו גם: XrGeospatialTrackerAnchorTrackingInfoANDROID
הפונקציה xrDestroyGeospatialTrackerANDROID מוגדרת כך:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
תיאורים של פרמטרים
-
geospatialTrackerהוא XrGeospatialTrackerANDROID שצריך להשמיד.
אפליקציה יכולה להשתמש בפונקציה xrDestroyGeospatialTrackerANDROID כדי לשחרר את הגשש הגיאו-מרחבי ואת המשאבים הבסיסיים.
שימוש תקף (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_geospatialלפני הקריאה ל-xrDestroyGeospatialTrackerANDROID -
geospatialTrackerחייב להיות נקודת אחיזה תקינה של XrGeospatialTrackerANDROID
Thread Safety
- הגישה אל
geospatialTrackerואל כל הכינויים של הילדים חייבת להיות מסונכרנת חיצונית
קודי החזרה
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
מצב של כלי מעקב גיאו-מרחבי
הספירה XrGeospatialTrackerStateANDROID מוגדרת כך:
typedef enum XrGeospatialTrackerStateANDROID {
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID = 0,
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID = 1,
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID = 2,
XR_GEOSPATIAL_TRACKER_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrGeospatialTrackerStateANDROID;
הספירה XrGeospatialTrackerStateANDROID מזהה את המצבים השונים של כלי מעקב גיאוגרפי.
הערכים האפשריים הם:
תיאור ה-Enum
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID
הכלי למיקום גיאוגרפי לא פועל.
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
מכשיר המעקב הגיאו-מרחבי פועל ואפשר להשתמש בו.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
הפעלת הכלי למיקום גיאוגרפי נכשלה, ולא ניתן יהיה להשתמש בו.
המבנה XrEventDataGeospatialTrackerStateChangedANDROID מוגדר כך:
typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialTrackerStateANDROID state;
XrResult initializationResult;
XrTime time;
} XrEventDataGeospatialTrackerStateChangedANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
geospatialTrackerהוא XrGeospatialTrackerANDROID שהמצב שלו השתנה. -
stateהוא XrGeospatialTrackerStateANDROID החדש . -
initializationResultהיא תוצאת השגיאה אםstateהיאXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID, אחרתXR_SUCCESS. -
timeהואXrTimeשבו התרחש שינוי המצב.
המבנה XrEventDataGeospatialTrackerStateChangedANDROID נשלח כשמצב הגשש הגיאו-מרחבי משתנה. אם לאפליקציה יש XrGeospatialTrackerANDROID תקין , מומלץ לבצע סקר כדי לזהות את האירוע הזה. האירוע הראשון שמתקבל לגבי כלי מעקב יכלול את הערך state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID . אחרי פרק זמן שנקבע בזמן הריצה, הסטטוס חייב להשתנות ל-XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID או ל-XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID . המעבר הזה יימשך פרק זמן לא קבוע. אם הערך של state משתנה ל-XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID , זה חייב להיות האירוע האחרון שמתקבל עבור כלי המעקב הזה, ובשדה initializationResult יופיע קוד השגיאה. יכול להיות שיחלפו כמה שניות עד שתופיע שגיאה. במקרה כזה, האפליקציה צריכה להשמיד את מכשיר המעקב. אם state משתנה ל-XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID , כל העוגנים הגיאוספציאליים שנוצרו קודם חייבים להפסיק את המעקב לצמיתות וצריכים להימחק על ידי האפליקציה. המצב יכול להשתנות שוב ושוב בין XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ל-XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID מספר פעמים לא מוגבל.
שימוש תקף (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_geospatialלפני שמשתמשים ב-XrEventDataGeospatialTrackerStateChangedANDROID -
typeחייב להיותXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
Geospatial Pose
המבנה XrGeospatialPoseANDROID מוגדר באופן הבא:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
תיאורי חברים
-
eastUpSouthOrientationהוא XrQuaternionf שמגדיר את הכיוון ביחס למערכת קואורדינטות שבה +X=East, +Y=Up and +Z=South. -
latitudeהוא קו הרוחב במעלות, בין -90 לבין +90. -
longitudeהוא קו האורך במעלות, בין -180 לבין +180. -
altitudeהוא הגובה מעל פני הים במטרים ביחס לאליפסואיד WGS84.
המבנה XrGeospatialPoseANDROID מייצג מיקום ואוריינטציה ביחס לכדור הארץ באמצעות אליפסואיד WGS84.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני שמשתמשים ב-XrGeospatialPoseANDROID - הערך של
latitudeחייב להיות ערך תקין שלdouble - הערך של
longitudeחייב להיות ערך תקין שלdouble - הערך של
altitudeחייב להיות ערך תקין שלdouble
הספירה XrGeospatialPoseFlagBitsANDROID מוגדרת כך:
// Flag bits for XrGeospatialPoseFlagsANDROID
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID = 0x00000001;
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID = 0x00000002;
הספירה XrGeospatialPoseFlagBitsANDROID מציינת דגלים למיקומים גיאומרחביים.
המשמעויות של הביטים של הדגל:
תיאורי הסימונים
-
XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID– מציין שהחבר ב-orientation מכיל נתונים תקינים -
XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID– מציין שהמיקום של חבר המועדון מכיל נתונים תקינים
הסוג XrGeospatialPoseFlagsANDROID הוא מסיכת ביטים של XrGeospatialPoseFlagBitsANDROID .
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
המרת XrPosef ל-Geospatial Pose
הפונקציה xrLocateGeospatialPoseFromPoseANDROID מוגדרת כך:
XrResult xrLocateGeospatialPoseFromPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
XrGeospatialPoseResultANDROID* geospatialPoseResult);
תיאורים של פרמטרים
-
geospatialTrackerהוא XrGeospatialTrackerANDROID שמשמש להמרה. -
locateInfoהוא מצביע אל XrGeospatialPoseFromPoseLocateInfoANDROID שמכיל פרמטרים של שאילתה. -
geospatialPoseResultהוא מצביע אל XrGeospatialPoseResultANDROID שמקבל את התוצאה.
הפונקציה xrLocateGeospatialPoseFromPoseANDROID ממירה תנוחה ב-XrGeospatialPoseFromPoseLocateInfoANDROID :: space לתנוחה גיאו-מרחבית. אם המצב של geospatialTracker הוא לא XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID , סביבת זמן הריצה חייבת להחזיר XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . אם הפונקציה מחזירה XR_SUCCESS , השדה XrGeospatialPoseResultANDROID :: poseFlags של geospatialPoseResult קובע אילו שדות פלט תקפים. אם הערך של XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID לא מוגדר ב-XrGeospatialPoseResultANDROID :: poseFlags , האפליקציה לא יכולה לקרוא את השדות XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy או XrGeospatialPoseResultANDROID :: verticalAccuracy ב-XrGeospatialPoseResultANDROID . אם הערך XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID לא מוגדר ב-XrGeospatialPoseResultANDROID :: poseFlags , האפליקציה לא יכולה לקרוא את XrGeospatialPoseANDROID :: eastUpSouthOrientation או את XrGeospatialPoseResultANDROID :: orientationYawAccuracy . אם לא מגדירים את XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID, אסור להגדיר גם את XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID.
אם רמת הדיוק נמוכה מהצפוי, יכול להיות שזה מעיד על כך שהמכשיר לא משתמש במיקום באמצעות VPS. האפליקציה יכולה להנחות את המשתמש להפנות את המכשיר לשלטים ולבניינים כדי לשפר את הלוקליזציה.
שימוש תקף (משתמע)
- יש להפעיל את התוסף
XR_ANDROID_geospatialלפני הקריאה ל-xrLocateGeospatialPoseFromPoseANDROID -
geospatialTrackerחייב להיות נקודת אחיזה תקינה של XrGeospatialTrackerANDROID -
locateInfomust be a pointer to a valid XrGeospatialPoseFromPoseLocateInfoANDROID structure -
geospatialPoseResultmust be a pointer to an XrGeospatialPoseResultANDROID structure
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
המבנה XrGeospatialPoseFromPoseLocateInfoANDROID מוגדר כך:
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
spaceהוא XrSpace שבו מוגדרpose. -
timeהואXrTimeשלפיו יש להעריך אתpose. -
poseהוא XrPosef ב-spaceלהמרה לתנוחה גיאו-מרחבית.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני השימוש ב-XrGeospatialPoseFromPoseLocateInfoANDROID -
typeחייב להיותXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace
המבנה XrGeospatialPoseResultANDROID מוגדר כך:
typedef struct XrGeospatialPoseResultANDROID {
XrStructureType type;
void* next;
XrGeospatialPoseFlagsANDROID poseFlags;
XrGeospatialPoseANDROID geospatialPose;
double horizontalAccuracy;
double verticalAccuracy;
double orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
poseFlagsהוא מסיכת ביטים של XrGeospatialPoseFlagsANDROID שמציינת את התוקף של רכיבי המיקום. -
geospatialPoseהיא התוצאה של XrGeospatialPoseANDROID . -
horizontalAccuracyהוא הדיוק האופקי המשוער של מיקום התנוחה הגיאוספציאלית, שמוגדר כרדיוס במטרים של המעגל ברמת סמך של 68% סביב קו הרוחב וקו האורך הנתונים. -
verticalAccuracyהוא הערך המשוער של הדיוק האנכי של מיקום התנוחה הגיאוספציאלית, שמוגדר כמרחק במטרים ברמת סמך של 68% סביב הגובה הנתון. במילים אחרות, יש סיכוי של 68% שהגובה האמיתי נמצא בטווח [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy]. -
orientationYawAccuracyהוא הדיוק המשוער של זווית הסבסוב של כיוון המיקום הגיאוגרפי, שמוגדר כרדיוס במעלות של רמת סמך של 68% סביב הכיוון הנתון.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני שמשתמשים ב-XrGeospatialPoseResultANDROID -
typeחייב להיותXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
המרת מיקום גיאו-מרחבי ל-XrPosef
הפונקציה xrLocateGeospatialPoseANDROID מוגדרת כך:
XrResult xrLocateGeospatialPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseLocateInfoANDROID* locateInfo,
XrSpaceLocation* location);
תיאורים של פרמטרים
-
geospatialTrackerהוא XrGeospatialTrackerANDROID שמשמש להמרה. -
locateInfoהוא מצביע אל XrGeospatialPoseLocateInfoANDROID שמכיל פרמטרים של שאילתה. -
locationהוא מצביע אל XrSpaceLocation שמקבל את התנוחה שמתקבלת.
הפונקציה xrLocateGeospatialPoseANDROID ממירה מיקום גיאוספציאלי ל-XrSpaceLocation . אם XrGeospatialTrackerANDROID לא פועל, זמן הריצה חייב להחזיר XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . אם הפונקציה מחזירה XR_SUCCESS , השדה XrSpaceLocation :: locationFlags של location קובע אילו שדות פלט תקפים.
שימוש תקף (משתמע)
- יש להפעיל את התוסף
XR_ANDROID_geospatialלפני הקריאה ל-xrLocateGeospatialPoseANDROID -
geospatialTrackerחייב להיות נקודת אחיזה תקינה של XrGeospatialTrackerANDROID -
locateInfoחייב להיות מצביע למבנה XrGeospatialPoseLocateInfoANDROID תקין -
locationmust be a pointer to an XrSpaceLocation structure
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
המבנה XrGeospatialPoseLocateInfoANDROID מוגדר כך:
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
spaceהוא XrSpace שבו התנוחה שתתקבל תיוצג. -
timeהואXrTimeשבו צריך לאתר את התנוחה. -
geospatialPoseהוא XrGeospatialPoseANDROID להמרה.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני השימוש ב-XrGeospatialPoseLocateInfoANDROID -
typeחייב להיותXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace -
geospatialPoseחייב להיות מבנה XrGeospatialPoseANDROID תקין
זמינות של VPS
הספירה XrVPSAvailabilityANDROID מוגדרת כך:
typedef enum XrVPSAvailabilityANDROID {
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;
הספירה XrVPSAvailabilityANDROID מציינת את הזמינות של VPS.
הערכים האפשריים הם:
תיאור ה-Enum
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
ה-VPS לא זמין בקרבת המיקום שצוין.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
שירות ה-VPS זמין בקרבת המיקום שצוין.
הפונקציה xrCheckVpsAvailabilityAsyncANDROID מוגדרת כך:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
תיאורים של פרמטרים
-
sessionהוא XrSession שמשמש לבדיקה. -
latitudeהוא קו הרוחב במעלות. -
longitudeהוא קו האורך במעלות. -
futureהוא מצביע ל-XrFutureEXTשיכיל את התוצאה של הפעולה האסינכרונית.
הזמינות של שירות מיקום חזותי (VPS) מציינת אם אפשר להשתמש ב-VPS כדי לשפר את הדיוק הגיאוגרפי במיקום מסוים.
הפונקציה xrCheckVpsAvailabilityAsyncANDROID מתחילה בדיקה אסינכרונית של זמינות ה-VPS במיקום נתון. האפליקציה לא צריכה XrGeospatialTrackerANDROID כדי להפעיל את הפונקציה הזו, ויכולה להשתמש בתוצאה של הפעולה הזו כדי להחליט אם ליצור אחת. אם האפליקציה לא קיבלה את ההרשאות הנדרשות, סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_PERMISSION_INSUFFICIENT .
שימוש תקף (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_geospatialלפני שמפעילים את xrCheckVpsAvailabilityAsyncANDROID -
sessionחייב להיות מאחז XrSession תקין - הערך של
latitudeחייב להיות ערך תקין שלdouble - הערך של
longitudeחייב להיות ערך תקין שלdouble -
futureחייב להיות מצביע לערךXrFutureEXT
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
הפונקציה xrCheckVpsAvailabilityCompleteANDROID מוגדרת כך:
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
תיאורים של פרמטרים
-
sessionהוא XrSession שמשמש לבדיקה. -
futureהואXrFutureEXTשמוחזר על ידי xrCheckVpsAvailabilityAsyncANDROID . -
completionהוא מצביע אל XrVPSAvailabilityCheckCompletionANDROID שמקבל את התוצאה.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני הקריאה ל-xrCheckVpsAvailabilityCompleteANDROID -
sessionחייב להיות מאחז XrSession תקין -
completionחייב להיות מצביע למבנה XrVPSAvailabilityCheckCompletionANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
המבנה XrVPSAvailabilityCheckCompletionANDROID מוגדר באופן הבא:
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
תיאורי חברים
-
typeהוא XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
futureResultהוא XrResult של פעולת הבדיקה. אם הערך שלfutureResultהואXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID, יכול להיות שמבנה בשרשרתnextיספק מידע נוסף על הכשל. -
availabilityהיא התוצאה של XrVPSAvailabilityANDROID . האפליקציה לא יכולה לקרוא את השדה הזה אלא אם הערך שלfutureResultהואXR_SUCCESS.
קודי החזרה עתידיים
ערכים של futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_geospatialחייב להיות מופעל לפני שמשתמשים ב-XrVPSAvailabilityCheckCompletionANDROID -
typeחייב להיותXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
futureResultחייב להיות ערך תקין של XrResult -
availabilityחייב להיות ערך תקין של XrVPSAvailabilityANDROID
דוגמה
הגדרת Geospatial Tracker
PFN_xrCheckVpsAvailabilityAsyncANDROID xrCheckVpsAvailabilityAsyncANDROID;
PFN_xrPollFutureEXT xrPollFutureEXT;
PFN_xrCheckVpsAvailabilityCompleteANDROID xrCheckVpsAvailabilityCompleteANDROID;
PFN_xrCreateGeospatialTrackerANDROID xrCreateGeospatialTrackerANDROID;
XrInstance instance = XR_NULL_HANDLE;
XrSystemId systemId = XR_NULL_SYSTEM_ID;
XrSession session = XR_NULL_HANDLE;
double lat = 37.422, lng = -122.084;
// Check for support.
XrSystemGeospatialPropertiesANDROID geospatialSystemProperties{
XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{XR_TYPE_SYSTEM_PROPERTIES,
&geospatialSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!geospatialSystemProperties.supportsGeospatial) {
return;
}
// Check VPS Availability.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCheckVpsAvailabilityAsyncANDROID(session, lat, lng, &future));
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
pollResult.state = XR_FUTURE_STATE_PENDING_EXT;
while (pollResult.state == XR_FUTURE_STATE_PENDING_EXT) {
// Do in render loop/state loop.
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
}
XrVPSAvailabilityCheckCompletionANDROID vpsCompletion{
XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID};
CHK_XR(xrCheckVpsAvailabilityCompleteANDROID(session, future, &vpsCompletion));
if (vpsCompletion.futureResult == XR_SUCCESS) {
if (vpsCompletion.availability == XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID) {
// Visual Positioning Service is not available. Accuracy of positions and
// orientations from Geospatial APIs are expected to be lower at this location.
} else {
// Visual Positioning Service is available. Higher accuracy of position and
// orientation is achievable at this location.
}
}
// Create Geospatial Tracker.
XrGeospatialTrackerCreateInfoANDROID createInfo{
XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID};
XrGeospatialTrackerANDROID geospatialTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateGeospatialTrackerANDROID(session, &createInfo, &geospatialTracker));
// In application main event loop:
while (true) {
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
if (xrPollEvent(instance, &event) != XR_SUCCESS) {
continue;
}
switch (event.type) {
case XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID:
const XrEventDataGeospatialTrackerStateChangedANDROID& eventData =
*reinterpret_cast<XrEventDataGeospatialTrackerStateChangedANDROID*>(&event);
switch (eventData.state) {
case XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID:
// Destroy existing anchors, if any.
break;
case XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID:
// Start adding content.
break;
case XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID:
// Handle eventData.initializationResult error result.
break;
}
}
}
קריאה לממשקי ה-API של מיקום גיאוגרפי
PFN_xrLocateGeospatialPoseFromPoseANDROID xrLocateGeospatialPoseFromPoseANDROID;
PFN_xrLocateGeospatialPoseANDROID xrLocateGeospatialPoseANDROID;
XrGeospatialTrackerANDROID geospatialTracker;
// Get pose from view space.
XrSpace viewSpace;
XrPosef identityPose = {{0,0,0,1},{0,0,0}};
XrGeospatialPoseFromPoseLocateInfoANDROID poseGetInfo{
XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID};
XrGeospatialPoseResultANDROID poseResult{
XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID};
poseGetInfo.space = viewSpace;
poseGetInfo.pose = identityPose;
poseGetInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseFromPoseANDROID(geospatialTracker, &poseGetInfo, &poseResult));
if ((poseResult.poseFlags & XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID) &&
(poseResult.poseFlags & XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID)) {
// poseResult.geospatialPose is valid.
}
// Convert Geospatial pose to an XrSpaceLocation.
XrGeospatialPoseLocateInfoANDROID poseLocateInfo{
XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID};
XrSpaceLocation location{XR_TYPE_SPACE_LOCATION};
poseLocateInfo.space = viewSpace;
poseLocateInfo.geospatialPose = poseResult.geospatialPose;
poseLocateInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseANDROID(geospatialTracker, &poseLocateInfo, &location));
if ((location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) &&
(location.locationFlags & XR_SPACE_LOCATION_POSITION_VALID_BIT)) {
// location.pose is valid.
}
סוגי אובייקטים חדשים
פקודות חדשות
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
מבנים חדשים
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
הרחבה של XrSystemProperties :
New Enums
מסיכות סיביות חדשות
New Enum Constants
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONהרחבה של XrObjectType :
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
הרחבה של XrResult :
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
הרחבה של XrStructureType :
XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID
בעיות
היסטוריית הגרסאות
גרסה 1, 2025-12-18 (בן קינג)
- התיאור הראשוני של התוסף.