سلسلة الاسم
XR_ANDROID_trackables_qr_code
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
460
المراجعة
1
متطلبات الإضافة والإصدار
تاريخ آخر تعديل
2025-02-05
حالة عنوان IP
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
كريستوفر دور، Google
ليفانا تشين، Google
Jared Finder, Google
سبنسر كوين، Google
"نيهاف جاين"، Google
دييغو تيبالدي، Google
كين ماكاي، Google
"دانيال غوتنبرغ"، شركة Qualcomm
نظرة عامة
يتيح هذا الامتداد تتبُّع رموز الاستجابة السريعة المادية وفك تشفير بيانات رموز الاستجابة السريعة.
فحص إمكانات النظام
XrSystemQrCodeTrackingPropertiesANDROID
يتم تحديد بنية XrSystemQrCodeTrackingPropertiesANDROID
على النحو التالي:
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint32_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
أوصاف الأعضاء
type
هوXrStructureType
هذا الهيكل.next
هوNULL
أو مؤشر إلى البنية التالية في سلسلة بنيات. لم يتم تحديد أي بنى من هذا النوع في OpenXR الأساسية أو هذه الإضافة.-
supportsQrCodeTracking
هوXrBool32
يشير إلى ما إذا كان النظام الحالي يوفّر إمكانية تتبُّع رمز الاستجابة السريعة. -
supportsQrCodeSizeEstimation
هوXrBool32
يشير إلى ما إذا كان النظام الحالي يوفّر تقديرًا لحجم رمز الاستجابة السريعة. maxQrCodeCount
هو الحدّ الأقصى لعدد رموز الاستجابة السريعة التي يمكن تتبُّعها في الوقت نفسه.
يمكن لأي تطبيق التحقّق مما إذا كان النظام قادرًا على تتبُّع رموز الاستجابة السريعة من خلال توسيع XrSystemProperties
باستخدام بنية XrSystemQrCodeTrackingPropertiesANDROID
عند استدعاء xrGetSystemProperties
.
يجب أن تعرض بيئة التشغيل القيمة XR_ERROR_FEATURE_UNSUPPORTED
لإنشاء أداة تتبُّع رمز الاستجابة السريعة
إذا وفقط إذا كانت قيمة supportsQrCodeTracking
هي
XR_FALSE
.
إذا كان وقت التشغيل يتيح تتبُّع رموز الاستجابة السريعة، يجب أن يتيح تتبُّع
maxQrCodeCount
رموز الاستجابة السريعة في أي وقت.
إذا كانت بيئة التشغيل تتيح تقدير حجم رمز الاستجابة السريعة، يمكن للتطبيق ضبط 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
أو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنى
تتبُّع رموز الاستجابة السريعة
تضيف هذه الإضافة XR_TRACKABLE_TYPE_QR_CODE_ANDROID
إلى
XrTrackableTypeANDROID
.
قد ينشئ التطبيق XrTrackableTrackerANDROID
من خلال استدعاء
xrCreateTrackableTrackerANDROID
وتحديد
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
كنوع قابل للتتبّع في
XrTrackableTrackerCreateInfoANDROID::trackableType
لتتبُّع رموز QR.
يجب أن تعرض بيئة التشغيل القيمة XR_ERROR_FEATURE_UNSUPPORTED
إذا كانت قيمة XrTrackableTrackerCreateInfoANDROID::trackableType
هي XR_TRACKABLE_TYPE_QR_CODE_ANDROID
وعرضت XrSystemQrCodeTrackingPropertiesANDROID::supportsQrCodeTracking
القيمة 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
إلى حجم حافة رمز الاستجابة السريعة بالأمتار. إذا كان صفرًا، سيتم تقدير حجم رمز الاستجابة السريعة على الإنترنت.
يجب أن يضبط التطبيق إعدادًا صالحًا من خلال إضافة
XrTrackableQrCodeConfigurationANDROID
إلى السلسلة التالية من
XrTrackableTrackerCreateInfoANDROID
.
بخلاف ذلك، يجب أن يعرض وقت التشغيل القيمة XR_ERROR_VALIDATION_FAILURE
.
إذا كانت بيئة التشغيل تتيح تقدير حجم رمز الاستجابة السريعة، يمكن للتطبيق ضبط
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
أوضاع التتبُّع المتوافقة لرموز الاستجابة السريعة.
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;
| Enum | Description XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID
'
| XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID
| رمز الاستجابة السريعة ديناميكي وقد يتحرّك. |
الحصول على رموز الاستجابة السريعة
xrGetTrackableQrCodeANDROID
يتم تعريف الدالة xrGetTrackableQrCodeANDROID
على النحو التالي:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
أوصاف المَعلمات
tracker
هوXrTrackableTrackerANDROID
الذي سيتم البحث فيه.getInfo
هوXrTrackableGetInfoANDROID
الذي يتضمّن المعلومات المستخدَمة للحصول على رمز الاستجابة السريعة القابل للتتبُّع.-
qrCodeOutput
هو مؤشر إلى بنيةXrTrackableQrCodeANDROID
التي يتم فيها عرض رمز الاستجابة السريعة القابل للتتبُّع.
يجب أن تعرض وقت التشغيل القيمة XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
إذا لم يكن نوع العنصر القابل للتتبّع XrTrackableANDROID
هو XR_TRACKABLE_TYPE_QR_CODE_ANDROID
، أو إذا لم يكن نوع العنصر القابل للتتبّع XrTrackableTrackerANDROID
هو XR_TRACKABLE_TYPE_QR_CODE_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
لرمز الاستجابة السريعة.-
lastUpdatedTime
هوXrTime
لآخر تعديل على رمز الاستجابة السريعة. -
centerPose
هوXrPosef
لرمز الاستجابة السريعة الذي يقع فيXrTrackableGetInfoANDROID::baseSpace
. يقع رمز الاستجابة السريعة في المستوى XZ، حيث يشير المحور X إلى يمين رمز الاستجابة السريعة، ويشير المحور Z إلى أسفله. extents
هو أبعادXrExtent2Df
لرمز الاستجابة السريعة. يقع حدّ المربّع المحيط عند النقاط:centerPose
+/- (extents
/ 2).bufferCapacityInput
هي إمكانيةbuffer
أو0
في استرداد الإمكانية المطلوبة.bufferCountOutput
إذا كانت قيمةbufferCapacityInput
هي0
، سيكتب وقت التشغيل حجم المخزن المؤقت المطلوب فيbufferCountOutput
. بخلاف ذلك، تحتوي على إجمالي العناصر المكتوبة فيbuffer
.-
buffer
هو مؤشر إلى مصفوفة منchar
لكتابة بيانات رمز الاستجابة السريعة الذي تم فك ترميزه. يمكن للتطبيق تمريرnullptr
لتحديد حجم المخزن المؤقت المطلوب أو ما إذا كان سيطلب بيانات فك ترميز رمز الاستجابة السريعة. يتم عرض بيانات رمز الاستجابة السريعة كسلسلة UTF-8 تنتهي بقيمة فارغة. - راجِع قسم مَعلمات حجم المخزن المؤقت للحصول على وصف تفصيلي حول كيفية استرداد حجم
buffer
المطلوب.
الاستخدام الصحيح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_trackables_qr_code
قبل استخدامXrTrackableQrCodeANDROID
- يجب أن يكون
type
XR_TYPE_TRACKABLE_QR_CODE_ANDROID
- يجب أن تكون قيمة
next
NULL
أو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنى - يجب أن تكون قيمة
trackingState
صالحةXrTrackingStateANDROID
- إذا لم تكن قيمة
bufferCapacityInput
هي0
،buffer
يجب أن يكون مؤشرًا إلى مصفوفة من قيمbufferCapacityInput
char
مثال على الرمز البرمجي للحصول على رموز استجابة سريعة قابلة للتتبّع
يوضّح نموذج الرمز البرمجي التالي كيفية الحصول على رموز استجابة سريعة قابلة للتتبّع.
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));
ثوابت التعداد الجديدة
تمت إضافة ما يلي إلى تعداد 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، 2025-02-05 (Levana Chen)
- وصف الإضافة الأوّلي
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجّلتان كعلامة تجارية في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.