XR_ANDROID_geospatial
رشته نام
XR_ANDROID_geospatial
نوع افزونه
افزونه نمونه
شماره داخلی ثبتشده
790
بازبینی
1
وضعیت تصویب
تصویبنشده
وابستگیهای افزونه و نسخه
XR_EXT_future
تاریخ آخرین تغییر
2025-12-18
وضعیت IP
هیچ ادعای مالکیت فکری شناختهشدهای وجود ندارد.
همیاران
John Ullman، Google
Ben King، Google
Nihav Jain، Google
Jared Finder، Google
نمای کلی
این افزونه ردیابی زمینمکانی را برای Geospatial API (میانای برنامهسازی کاربردی زمینمکانی) Google ارائه میدهد که جهتیابی و مکان جغرافیایی دقیقی را ارائه میدهد و به برنامه اجازه میدهد محتوا را نسبت به زمین قرار دهد. این کار را بااستفاده از ترکیبی از ردیابی حرکت، GPS و حسگرهای دیگر، و «سیستم موقعیتیابی بصری» (VPS) Google انجام میدهد. VPS تصاویر دوربین دستگاه را با تصاویر «نمای خیابان» مقایسه میکند تا مکان و جهت دقیق را تعیین کند. Geospatial API اغلب دقت موقعیتی زیر متر (چندین برابر بهتر از GPS) و دقت جهتیابی زیر درجه ارائه میدهد.
برای استفاده موفقیتآمیز از میاناهای برنامهسازی کاربردی در این افزونه (بهجز بررسی پشتیبانی افزونه)، برنامه باید اعتبارنامههای اصالتسنجی را ازطریق مکانیزمی مانند 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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. -
supportsGeospatialیکXrBool32است که نشان میدهد آیا سیستم فعلی از ویژگیهای جغرافیایی پشتیبانی میکند یا نه.
برنامه میتواند با زنجیر کردن ساختار XrSystemGeospatialPropertiesANDROID به XrSystemProperties هنگام فراخوانی xrGetSystemProperties، بررسی کند که آیا سیستم از ویژگیهای جغرافیایی پشتیبانی میکند یا نه.
اگر زمان اجرا XR_FALSE را برای supportsGeospatial برگرداند، سیستم از ویژگیهای جغرافیایی-فضایی پشتیبانی نمیکند و بنابراین باید XR_ERROR_FEATURE_UNSUPPORTED را از xrCreateGeospatialTrackerANDROID برگرداند. برنامه باید از عملکرد جغرافیایی زمانی که supportsGeospatial XR_FALSE است، اجتناب کند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_geospatialباید پیشاز استفاده از XrSystemGeospatialPropertiesANDROID فعال شود -
typeبایدXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDباشد -
nextبایدNULLیا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد
ایجاد دسته Geospatial Tracker
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
تابع xrCreateGeospatialTrackerANDROID بهصورت زیر تعریف میشود:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
شرح پارامترها
-
sessionیک XrSession است که ردیاب جغرافیایی در آن فعال خواهد بود. -
createInfoاشارهگری به ساختار XrGeospatialTrackerCreateInfoANDROID است که پارامترهای اولیه ردیاب زمینمکانی را مشخص میکند. -
geospatialTrackerOutputاشارهگری به دستگیرهای است که XrGeospatialTrackerANDROID ایجادشده در آن برگردانده میشود.
برنامه میتواند با فراخوانی xrCreateGeospatialTrackerANDROID، یک دسته XrGeospatialTrackerANDROID ایجاد کند. از دسته XrGeospatialTrackerANDROID برگرداندهشده میتوان متعاقباً در فراخوانیهای میانای برنامهسازی کاربردی استفاده کرد. اگر برنامه اجازههای لازم را دریافت نکرده باشد، زمان اجرا باید 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 را برگرداند.
دستگیره XrGeospatialTrackerANDROID باید درنهایت ازطریق تابع xrDestroyGeospatialTrackerANDROID آزاد شود.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_geospatialباید قبلاز فراخوانی xrCreateGeospatialTrackerANDROID فعال شود -
sessionباید یک دسته XrSession معتبر باشد -
createInfoباید اشارهگری به ساختار معتبر XrGeospatialTrackerCreateInfoANDROID باشد -
geospatialTrackerOutputباید اشارهگری به شناسه مجازی 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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_geospatialباید قبلاز استفاده از XrGeospatialTrackerCreateInfoANDROID فعال شود -
typeبایدXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDباشد -
nextبایدNULLیا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد. همچنین ببینید: XrGeospatialTrackerAnchorTrackingInfoANDROID
تابع xrDestroyGeospatialTrackerANDROID بهصورت زیر تعریف میشود:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
شرح پارامترها
-
geospatialTrackerXrGeospatialTrackerANDROID است که باید ازبین برود.
برنامه میتواند از تابع xrDestroyGeospatialTrackerANDROID برای رها کردن ردیاب جغرافیایی و منابع اساسی استفاده کند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_geospatialباید قبلاز فراخوانی xrDestroyGeospatialTrackerANDROID فعال شود -
geospatialTrackerباید یک دسته XrGeospatialTrackerANDROID معتبر باشد
ایمنی رشتهای
- دسترسی به
geospatialTrackerو هرگونه دسته فرزند باید بهصورت خارجی همگامسازی شود
کدهای برگشتی
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
وضعیت ردیاب زمینمکانی
شمارش 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 حالتهای مختلف ردیاب جغرافیایی را شناسایی میکند.
مقادیر شمارشی دارای مقادیر زیر هستند:
شرح شمارشی
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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. -
geospatialTrackerهمان XrGeospatialTrackerANDROID است که وضعیت آن تغییر کرده است. stateXrGeospatialTrackerStateANDROID جدید است.initializationResultنتیجه خطا است اگرstateبرابر باXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROIDباشد، درغیراینصورتXR_SUCCESSاست.timeXrTimeاست که در آن تغییر وضعیت رخ داده است.
ساختار 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یا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد
ژست زمینمکانی
ساختار XrGeospatialPoseANDROID بهصورت زیر تعریف میشود:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
توضیحات عضو
eastUpSouthOrientationیک XrQuaternionf است که جهت را نسبت به سیستم مختصاتی تعریف میکند که در آن +X=شرق، +Y=بالا، و +Z=جنوب است.latitudeعرض جغرافیایی به درجه است، بین ۹۰- و ۹۰+.longitudeطول جغرافیایی به درجه است، بین ۱۸۰- و ۱۸۰+.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— نشان میدهد که عضو جهتیابی حاوی دادههای معتبر استXR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID— نشان میدهد که عضو موقعیت حاوی دادههای معتبر است
نوع XrGeospatialPoseFlagsANDROID یک ماسک بیتی از XrGeospatialPoseFlagBitsANDROID است.
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
درحال تبدیل XrPosef به «وضعیت مکانی-فضایی»
تابع 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 معتبر باشد -
locateInfoباید اشارهگری به ساختار معتبر XrGeospatialPoseFromPoseLocateInfoANDROID باشد -
geospatialPoseResultباید اشارهگری به ساختار XrGeospatialPoseResultANDROID باشد
کدهای برگشتی
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;
توضیحات عضو
typeXrStructureType این ساختار است.-
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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. -
poseFlagsیک ماسک بیتی از XrGeospatialPoseFlagsANDROID است که اعتبار مؤلفههای حالت را نشان میدهد. geospatialPoseنتیجه XrGeospatialPoseANDROID است.-
horizontalAccuracyدقت افقی تخمینی موقعیت ژست «فضایی جغرافیایی» است که بهصورت شعاع (به متر) دایرهای با سطح اطمینان ۶۸٪ در اطراف عرض و طول جغرافیایی دادهشده تعریف میشود. verticalAccuracyدقت عمودی تخمینی موقعیت حالت «فضای جغرافیایی» است که بهعنوان فاصله برحسب متر با سطح اطمینان ۶۸٪ در اطراف ارتفاع دادهشده تعریف میشود. به عبارت دیگر، ۶۸٪ احتمال دارد که ارتفاع واقعی در محدوده [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy] باشد.-
orientationYawAccuracyدقت تخمینی انحراف جهت ژست «فضای جغرافیایی» است که بهعنوان شعاع برحسب درجه سطح اطمینان ۶۸٪ در اطراف جهت دادهشده تعریف میشود.
استفاده معتبر (ضمنی)
- افزونه
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 باشد -
locationباید اشارهگری به ساختار XrSpaceLocation باشد
کدهای برگشتی
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_POSE_INVALIDXR_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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. -
spaceهمان XrSpace است که حالت نهایی در آن نمایش داده خواهد شد. timeXrTimeاست که در آن حالت قرار دارد.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 است.
مقادیر شمارشی دارای مقادیر زیر هستند:
شرح شمارشی
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
«سرویس موقعیتیابی بصری» در نزدیکی مکان ارائهشده دردسترس نیست.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
VPS در نزدیکی مکان ارائهشده دردسترس است.
تابع xrCheckVpsAvailabilityAsyncANDROID بهصورت زیر تعریف میشود:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
شرح پارامترها
sessionXrSession است که برای بررسی استفاده میشود.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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. -
futureResultXrResult عملیات بررسی است. اگرfutureResultبرابر باXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDباشد، ساختاری در زنجیرهnextممکن است اطلاعات بیشتری درباره این عملیات ناموفق ارائه دهد. availabilityنتیجه XrVPSAvailabilityANDROID است. برنامه نباید این فیلد را بخواند مگراینکهfutureResultXR_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 معتبری باشد
مثال
راهاندازی ردیاب زمینمکانی
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;
}
}
}
فراخوانی میاناهای برنامهسازی کاربردی Geospatial Pose
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 :
Enums جدید
ماسکهای بیتی جدید
ثابتهای شمارشی جدید
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
مشکلات
سابقه نسخه
بازبینی ۱، ۲۰۲۵-۱۲-۱۸ (بن کینگ)
- توضیحات اولیه افزونه.