رشته نام
XR_ANDROID_trackables_qr_code
نوع پسوند
پسوند نمونه
شماره برنامه افزودنی ثبت شده
460
تجدید نظر
1
وابستگی های افزونه و نسخه
آخرین تاریخ اصلاح
05-02-2025
وضعیت IP
هیچ ادعای IP شناخته شده ای وجود ندارد.
مشارکت کنندگان
کریستوفر دور، گوگل
لوانا چن، گوگل
جارد فایندر، گوگل
اسپنسر کوین، گوگل
نیهاو جین، گوگل
دیگو تیپالدی، گوگل
کن مکی، گوگل
دانیل گوتنبرگ، کوالکام
نمای کلی
این افزونه ردیابی فیزیکی کد QR و رمزگشایی داده های کد QR را فعال می کند.
قابلیت سیستم را بررسی کنید
XrSystemQrCodeTrackingPropertiesANDROID
ساختار XrSystemQrCodeTrackingPropertiesANDROID
به صورت زیر تعریف می شود:
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint32_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
توضیحات اعضا
-
type
XrStructureType
این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
supportsQrCodeTracking
یکXrBool32
است که نشان می دهد آیا سیستم فعلی قابلیت ردیابی کد QR را دارد یا خیر. -
supportsQrCodeSizeEstimation
یکXrBool32
است که نشان می دهد آیا سیستم فعلی تخمین اندازه کد QR را ارائه می دهد یا خیر. -
maxQrCodeCount
حداکثر تعداد کل کدهای QR است که می توان همزمان ردیابی کرد.
هنگام فراخوانی XrSystemQrCodeTrackingPropertiesANDROID
xrGetSystemProperties
یک برنامه کاربردی میتواند بررسی کند که آیا سیستم قادر به ردیابی کد QR است XrSystemProperties
خیر. زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED
برای ایجاد ردیاب کد QR برگرداند اگر و فقط اگر supportsQrCodeTracking
XR_FALSE
باشد.
اگر یک زمان اجرا از ردیابی کد QR پشتیبانی می کند، باید در هر زمان معین از کدهای QR ردیابی شده maxQrCodeCount
پشتیبانی کند.
اگر زمان اجرا از تخمین اندازه کد QR پشتیبانی می کند، برنامه می تواند XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
0
را برای نشان دادن استفاده از تخمین اندازه تنظیم کند. در غیر این صورت، برنامه باید XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
روی یک مقدار مثبت تنظیم کند وگرنه XR_ERROR_VALIDATION_FAILURE
برگردانده می شود.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_trackables_qr_code
باید قبل از استفاده ازXrSystemQrCodeTrackingPropertiesANDROID
فعال شود -
type
بایدXR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID
باشد -
next
بایدNULL
یا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد
ردیابی کدهای QR
این برنامه افزودنی XR_TRACKABLE_TYPE_QR_CODE_ANDROID
را به XrTrackableTypeANDROID
اضافه می کند.
برنامه ممکن است با xrCreateTrackableTrackerANDROID
XrTrackableTrackerANDROID
مشخص کردن XR_TRACKABLE_TYPE_QR_CODE_ANDROID
به عنوان نوع قابل ردیابی در XrTrackableTrackerCreateInfoANDROID::trackableType
برای ردیابی کدهای QR، یک XrTrackableTrackerANDROID ایجاد کند.
اگر XrTrackableTrackerCreateInfoANDROID::trackableType
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
XrSystemQrCodeTrackingProperties و XrSystemQrCodeTrackingPropertiesANDROID::supportsQrCodeTracking
باشد، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED
باشد XR_FALSE
xrGetSystemProperties
.
XrTrackableQrCodeConfigurationANDROID
ساختار XrTrackableQrCodeConfigurationANDROID
به صورت زیر تعریف می شود:
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
const void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
توضیحات اعضا
-
type
XrStructureType
این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
trackingMode
یکXrQrCodeTrackingModeANDROID
است که حالت مورد نظر برای ردیابی را نشان می دهد. -
qrCodeEdgeSize
اندازه لبه کد QR را بر حسب متر نشان می دهد. اگر صفر باشد، اندازه کد QR به صورت آنلاین تخمین زده می شود.
برنامه باید با افزودن یک XrTrackableQrCodeConfigurationANDROID
به زنجیره بعدی XrTrackableTrackerCreateInfoANDROID
یک پیکربندی معتبر تنظیم کند. در غیر این صورت، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE
برگرداند.
اگر زمان اجرا از تخمین اندازه کد QR پشتیبانی می کند، برنامه ممکن است XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
را روی 0
تنظیم کند تا میزان استفاده از تخمین اندازه را نشان دهد. در غیر این صورت، برنامه باید XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
روی یک مقدار مثبت تنظیم کند وگرنه XR_ERROR_VALIDATION_FAILURE
برگردانده می شود.
زمان اجرا باید خروجی xrGetAllTrackablesANDROID
را فیلتر کند تا با trackingMode
و qrCodeEdgeSize
مطابقت داشته باشد.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_trackables_qr_code
باید قبل از استفاده ازXrTrackableQrCodeConfigurationANDROID
فعال شود -
type
بایدXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
باشد -
next
بایدNULL
یا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد -
trackingMode
باید یک مقدار معتبرXrQrCodeTrackingModeANDROID
باشد
XrQrCodeTrackingModeANDROID
شماره XrQrCodeTrackingModeANDROID
حالت های ردیابی پشتیبانی شده کدهای QR را توصیف می کند.
typedef enum XrQrCodeTrackingModeANDROID {
XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID = 0,
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID = 1,
XR_QR_CODE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrQrCodeTrackingModeANDROID;
| شمارش | توضیحات - | XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID
| کد QR ثابت است و حرکت نمی کند. ' | XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID
| کد QR پویا است و ممکن است حرکت کند. |
کدهای QR را دریافت کنید
xrGetTrackableQrCodeANDROID
تابع xrGetTrackableQrCodeANDROID
به صورت زیر تعریف می شود:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
توضیحات پارامترها
-
tracker
XrTrackableTrackerANDROID
برای پرس و جو است. -
getInfo
XrTrackableGetInfoANDROID
با اطلاعات مورد استفاده برای دریافت کد QR قابل ردیابی است. -
qrCodeOutput
یک اشاره گر به ساختارXrTrackableQrCodeANDROID
است که در آن کد QR قابل ردیابی برگردانده می شود.
اگر نوع قابل ردیابی XrTrackableANDROID
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
نیست، یا اگر نوع قابل ردیابی XrTrackableTrackerANDROID
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
نباشد، زمان اجرا باید XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
باشد.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_trackables_qr_code
باید قبل از فراخوانیxrGetTrackableQrCodeANDROID
فعال شود -
tracker
باید یک دسته معتبرXrTrackableTrackerANDROID
باشد -
getInfo
باید یک اشاره گر به یک ساختار معتبرXrTrackableGetInfoANDROID
باشد -
qrCodeOutput
باید یک اشاره گر به یک ساختارXrTrackableQrCodeANDROID
باشد
XrTrackableQrCodeANDROID
ساختار XrTrackableQrCodeANDROID
به صورت زیر تعریف می شود:
typedef struct XrTrackableQrCodeANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrPosef centerPose;
XrExtent2Df extents;
uint32_t bufferCapacityInput;
uint32_t bufferCountOutput;
char* buffer;
} XrTrackableQrCodeANDROID;
توضیحات اعضا
-
type
XrStructureType
این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
trackingState
XrTrackingStateANDROID
کد QR است. -
lastUpdatedTime
XrTime
آخرین به روز رسانی کد QR است. -
centerPose
XrPosef
کد QR است که درXrTrackableGetInfoANDROID::baseSpace
قرار دارد. کد QR در صفحه XZ قرار دارد که X به سمت راست کد QR و Z به پایین آن اشاره می کند. -
extents
ابعادXrExtent2Df
کد QR است. مرز جعبه مرزی در نقاط است:centerPose
+/- (extents
/ 2). -
bufferCapacityInput
تواناییbuffer
یا0
برای بازیابی قابلیت مورد نیاز است. -
bufferCountOutput
اگرbufferCapacityInput
0
باشد، زمان اجرا اندازه بافر مورد نیاز را درbufferCountOutput
خواهد نوشت. در غیر این صورت، شامل کل عناصر نوشته شده درbuffer
است. -
buffer
یک اشاره گر به آرایه ای ازchar
برای نوشتن داده های کد QR رمزگشایی شده است. برنامه می تواند یکnullptr
برای تعیین اندازه بافر مورد نیاز یا در صورت عدم درخواست رمزگشایی داده های کد QR ارسال کند. دادههای کد QR بهعنوان رشته UTF-8 با تهی بازگردانده میشوند. - برای توضیح دقیق بازیابی اندازه
buffer
مورد نیاز به بخش پارامترهای اندازه بافر مراجعه کنید.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_trackables_qr_code
باید قبل از استفاده ازXrTrackableQrCodeANDROID
فعال شود -
type
بایدXR_TYPE_TRACKABLE_QR_CODE_ANDROID
باشد -
next
بایدNULL
یا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد -
trackingState
باید یک مقدار معتبرXrTrackingStateANDROID
باشد - اگر
bufferCapacityInput
0
نباشد،buffer
باید نشانگر آرایه ای از مقادیر کاراکترbufferCapacityInput
باشد.
کد نمونه برای دریافت کدهای QR قابل ردیابی
کد مثال زیر نحوه دریافت کدهای QR قابل ردیابی را نشان می دهد.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetSystemProperties xrGetSystemProperties; // previously initialized
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrGetTrackableQrCodeANDROID xrGetTrackableQrCodeANDROID; // previously initialized
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // previously initialized
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
// Inspect system capability
XrSystemQrCodeTrackingPropertiesANDROID qrCodeProperty =
{.type = XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID, .next = nullptr};
XrSystemProperties systemProperties = {.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &qrCodeProperty};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!qrCodeProperty.supportsQrCodeTracking) {
// QR Code tracking is not supported.
return;
}
// Create a trackable tracker for QR Code tracking.
// If the runtime does not support size estimation, configures QR Code edge size of 0.1m.
XrTrackableQrCodeConfigurationANDROID configuration =
{.type = XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID,
.next = nullptr,
.trackingMode = XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID,
.qrCodeEdgeSize = qrCodeProperty.supportsQrCodeSizeEstimation ? 0.0f : 0.1f};
XrTrackableTrackerCreateInfoANDROID createInfo =
{.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &configuration,
.trackableType = XR_TRACKABLE_TYPE_QR_CODE_ANDROID};
XrTrackableTrackerANDROID qrCodeTracker;
auto res = xrCreateTrackableTrackerANDROID(session, &createInfo, &qrCodeTracker);
if (res == XR_ERROR_PERMISSION_INSUFFICIENT) {
// Handle permission requests.
}
CHK_XR(res);
// Get QR Codes.
std::vector<XrTrackableANDROID> trackables(qrCodeProperty.maxQrCodeCount);
std::vector<XrTrackableQrCodeANDROID> qrCodes(qrCodeProperty.maxQrCodeCount);
uint32_t qrCodeSize = 0;
CHK_XR(xrGetAllTrackablesANDROID(qrCodeTracker, qrCodeProperty.maxQrCodeCount, &qrCodeSize,
trackables.data()));
for (int i = 0; i < qrCodeSize; i++) {
qrCodes[i].type = XR_TYPE_TRACKABLE_QR_CODE_ANDROID;
qrCodes[i].next = nullptr;
qrCodes[i].bufferCountOutput = 0;
XrTrackableGetInfoANDROID getInfo = {.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
.next = nullptr,
.trackable = trackables.at(i),
.baseSpace = appSpace,
.time = updateTime};
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
if (qrCodes[i].bufferCountOutput > 0) {
// Allocate the buffer if it is not already allocated.
if (qrCodes[i].bufferCapacityInput == 0) {
qrCodes[i].buffer = new char[qrCodes[i].bufferCountOutput];
qrCodes[i].bufferCapacityInput = qrCodes[i].bufferCountOutput;
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
}
}
}
// Release trackable tracker.
CHK_XR(xrDestroyTrackableTrackerANDROID(qrCodeTracker));
ثابت های جدید Enum
شمارش XrStructureType
با:
-
XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID
-
XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
-
XR_TYPE_TRACKABLE_QR_CODE_ANDROID
شمارش XrTrackableTypeANDROID
با:
-
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
فهرست های جدید
-
XrQrCodeTrackingModeANDROID
ساختارهای جدید
-
XrSystemQrCodeTrackingPropertiesANDROID
-
XrTrackableQrCodeConfigurationANDROID
-
XrTrackableQrCodeANDROID
توابع جدید
-
xrGetTrackableQrCodeANDROID
مسائل
تاریخچه نسخه
- بازبینی 1، 05-02-2025 (لوانا چن)
- توضیحات پسوند اولیه
OpenXR™ و لوگوی OpenXR علائم تجاری متعلق به The Khronos Group Inc. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.