رشته نام
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;
توضیحات اعضا
-
typeXrStructureTypeاین ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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;
توضیحات اعضا
-
typeXrStructureTypeاین ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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);
توضیحات پارامترها
-
trackerXrTrackableTrackerANDROIDبرای پرس و جو است. -
getInfoXrTrackableGetInfoANDROIDبا اطلاعات مورد استفاده برای دریافت کد 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;
توضیحات اعضا
-
typeXrStructureTypeاین ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
trackingStateXrTrackingStateANDROIDکد QR است. -
lastUpdatedTimeXrTimeآخرین به روز رسانی کد QR است. -
centerPoseXrPosefکد QR است که درXrTrackableGetInfoANDROID::baseSpaceقرار دارد. کد QR در صفحه XZ قرار دارد که X به سمت راست کد QR و Z به پایین آن اشاره می کند. -
extentsابعادXrExtent2Dfکد QR است. مرز جعبه مرزی در نقاط است:centerPose+/- (extents/ 2). -
bufferCapacityInputتواناییbufferیا0برای بازیابی قابلیت مورد نیاز است. -
bufferCountOutputاگرbufferCapacityInput0باشد، زمان اجرا اندازه بافر مورد نیاز را در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باشد - اگر
bufferCapacityInput0نباشد،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. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.