XR_ANDROID_geospatial
رشته نام
XR_ANDROID_geospatial
نوع افزونه
افزونه نمونه
شماره داخلی ثبت شده
۷۹۰
بازنگری
۱
وضعیت تصویب
تصویب نشده
وابستگیهای افزونه و نسخه
XR_EXT_future
آخرین تاریخ اصلاح
۲۰۲۵-۱۲-۱۸
وضعیت آیپی
هیچ ادعای مالکیت معنوی شناختهشدهای وجود ندارد.
مشارکتکنندگان
جان اولمن، گوگل
بن کینگ، گوگل
نیهاو جین، گوگل
جارد فایندر، گوگل
نمای کلی
این افزونه، ردیابی مکانی را برای API مکانی گوگل فراهم میکند که موقعیت مکانی و جهتگیری دقیقی را ارائه میدهد و به برنامه اجازه میدهد تا محتوا را نسبت به زمین قرار دهد. این کار را با استفاده از ترکیبی از ردیابی حرکت، GPS و سایر حسگرها و سیستم موقعیتیابی بصری (VPS) گوگل انجام میدهد. VPS تصاویر دوربین دستگاه را با تصاویر Street View مقایسه میکند تا مکان و جهتگیری دقیقی را تعیین کند. API مکانی اغلب دقت مکانی زیر متر (چندین برابر بهتر از GPS) و دقت جهتگیری زیر درجه را ارائه میدهد.
برای استفاده موفقیتآمیز از APIهای این افزونه (به غیر از بررسی پشتیبانی افزونه)، برنامه باید اعتبارنامههای احراز هویت را با موفقیت از طریق مکانیسمی مانند XR_ANDROID_google_cloud_auth تنظیم کرده باشد. برای جزئیات بیشتر در مورد تنظیمات و نتایج خطا، به مستندات افزونه auth مراجعه کنید.
مجوزها
برنامههای اندروید برای استفاده از این افزونه باید مجوز 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 ، بررسی کند که آیا سیستم از ویژگیهای مکانی پشتیبانی میکند یا خیر.
اگر یک زمان اجرا برای supportsGeospatial XR_FALSE را برگرداند، سیستم از ویژگیهای مکانی پشتیبانی نمیکند و بنابراین باید XR_ERROR_FEATURE_UNSUPPORTED از xrCreateGeospatialTrackerANDROID برگرداند. برنامه باید از استفاده از قابلیتهای مکانی در زمانی که supportsGeospatial XR_FALSE است، خودداری کند.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrSystemGeospatial، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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یک اشارهگر به یک هندل است که در آن XrGeospatialTrackerANDROID ایجاد شده بازگردانده میشود.
یک برنامه میتواند با فراخوانی xrCreateGeospatialTrackerANDROID یک دسته XrGeospatialTrackerANDROID ایجاد کند. دسته 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 برگرداند.
در نهایت، باید تابع XrGeospatialTrackerANDROID از طریق تابع xrDestroyGeospatialTrackerANDROID آزاد شود.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_geospatialباید قبل از فراخوانی xrCreateGeospatialTrackerANDROID فعال شود. -
sessionباید یک دسته XrSession معتبر باشد -
createInfoباید یک اشارهگر به ساختار معتبر XrGeospatialTrackerCreateInfoANDROID باشد. -
geospatialTrackerOutputباید یک اشارهگر به یک هندل XrGeospatialTrackerANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_PERMISSION_INSUFFICIENT -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_VALIDATION_FAILURE
ساختار XrGeospatialTrackerCreateInfoANDROID به صورت زیر تعریف شده است:
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrGeospatialTrackerCreateInfoANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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 باشد
ایمنی رزوه
- دسترسی به
geospatialTrackerو هر دسته فرزندی باید به صورت خارجی هماهنگ شود
کدهای بازگشت
-
XR_SUCCESS
-
XR_ERROR_CALL_ORDER_INVALID -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_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 حالتهای مختلف یک ردیاب مکانی را مشخص میکند.
شمارشگرها مقادیر زیر را دارند:
توضیحات شمارشی
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 این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
geospatialTrackerهمان XrGeospatialTrackerANDROID است که وضعیت آن تغییر کرده است. -
stateXrGeospatialTrackerStateANDROID جدید است. - اگر
stateXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROIDباشد،initializationResultنتیجه خطا است، در غیر این صورت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 تغییر کند.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrEventDataGeospatial، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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، موقعیت و جهتگیری را نسبت به زمین نشان میدهد.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrGeospatialPoseANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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 به موقعیت مکانی
تابع 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_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_POSE_INVALID -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_TIME_INVALID -
XR_ERROR_VALIDATION_FAILURE
ساختار XrGeospatialPoseFromPoseLocateInfoANDROID به صورت زیر تعریف میشود:
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
space، XrSpace است کهposeدر آن تعریف میشود. -
time،XrTimeاست که در آن میتوانposeارزیابی کرد. -
pose، XrPosef درspaceاست که باید به یک پوز جغرافیایی تبدیل شود.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrGeospatialPoseFromPoseLocateInfoANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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 این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
poseFlagsیک bitmask از XrGeospatialPoseFlagsANDROID است که اعتبار اجزای pose را نشان میدهد. -
geospatialPoseنتیجهی XrGeospatialPoseANDROID است. -
horizontalAccuracyدقت افقی تخمینی موقعیت مکانی است که به صورت شعاع دایره با سطح اطمینان ۶۸٪ حول طول و عرض جغرافیایی داده شده (بر حسب متر) تعریف میشود. -
verticalAccuracy، دقت عمودی تخمینی موقعیت مکانی است که به صورت فاصله بر حسب متر با سطح اطمینان ۶۸٪ در اطراف ارتفاع داده شده تعریف میشود. به عبارت دیگر، ۶۸٪ احتمال وجود دارد که ارتفاع واقعی در محدوده [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy] باشد. -
orientationYawAccuracyدقت انحراف تخمینی جهتگیری موقعیت مکانی است که به صورت شعاع بر حسب درجه با سطح اطمینان ۶۸٪ در اطراف جهتگیری داده شده تعریف میشود.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrGeospatialPoseResultANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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 را برگرداند، location XrSpaceLocation :: locationFlags تعیین میکند که کدام فیلدهای خروجی معتبر هستند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_geospatialباید قبل از فراخوانی xrLocateGeospatialPoseANDROID فعال شود. -
geospatialTrackerباید یک شناسه معتبر XrGeospatialTrackerANDROID باشد -
locateInfoباید یک اشارهگر به ساختار معتبر XrGeospatialPoseLocateInfoANDROID باشد. -
locationباید یک اشارهگر به ساختار XrSpaceLocation باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID -
XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_TIME_INVALID -
XR_ERROR_VALIDATION_FAILURE
ساختار XrGeospatialPoseLocateInfoANDROID به صورت زیر تعریف میشود:
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
spaceهمان XrSpace است که پوز حاصل در آن نمایش داده خواهد شد. -
time،XrTimeبرای پیدا کردن پوز است. -
geospatialPoseهمان XrGeospatialPoseANDROID برای تبدیل است.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrGeospatialPoseLocateInfoANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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
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_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_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_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_FUTURE_INVALID_EXT -
XR_ERROR_FUTURE_PENDING_EXT -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_VALIDATION_FAILURE
ساختار XrVPSAvailabilityCheckCompletionANDROID به صورت زیر تعریف میشود:
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
futureResult، XrResult عملیات بررسی است. اگرfutureResultبرابر باXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDباشد، ساختاری در زنجیرهnextممکن است اطلاعات بیشتری در مورد خرابی ارائه دهد. - در نتیجه
availabilityبرابر با XrVPSAvailabilityANDROID است. برنامه نباید این فیلد را بخواند، مگر اینکهfutureResultXR_SUCCESSباشد.
کدهای بازگشت آینده
مقادیر futureResult :
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_SESSION_LOST -
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrVPSAvailabilityCheckCompletionANDROID، افزونهی
XR_ANDROID_geospatialباید فعال باشد. -
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;
}
}
}
فراخوانی 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.
}
انواع شیء جدید
دستورات جدید
- بررسی دسترسی به Vps در xr و همگامسازی آندروئید
- xrCheckVpsموجودیت کاملاندروید
- ردیاب مکانی xrCreate اندروید
- ردیاب مکانی xrDestroy اندروید
- xrLocateموقعیت مکانیاندروید
- xrLocateGeospatialPoseFromPoseANDROID
سازههای جدید
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- اطلاعات موقعیت مکانی XrGeospatialPoseLocateAndroid
- XrGeospatialPoseResultاندروید
- ردیاب جغرافیایی Xr، اطلاعات ایجاد شده در اندروید
- XrVPSبررسی در دسترس بودنتکمیل اندروید
بسط XrSystemProperties :
Enum های جدید
بیتماسکهای جدید
ثابتهای شمارشی جدید
-
XR_ANDROID_GEOSPATIAL_EXTENSION_NAME -
XR_ANDROID_geospatial_SPEC_VERSION بسط XrObjectType :
-
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
-
بسط XrResult :
-
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID -
XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID -
XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
-
گسترش XrStructureType :
-
XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID -
XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID -
XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID -
XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID -
XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID -
XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID -
XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID
-
مسائل
تاریخچه نسخه
نسخه ۱، ۲۰۲۵-۱۲-۱۸ (بن کینگ)
- توضیحات اولیه افزونه