Name String
XR_ANDROID_trackables_qr_code
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
460
बदलाव
1
एक्सटेंशन और वर्शन की डिपेंडेंसी
पिछली बार बदलाव किए जाने की तारीख
2025-02-05
आईपी स्टेटस
आईपी से जुड़े किसी भी दावे की जानकारी नहीं है.
योगदान देने वाले
क्रिस्टोफ़र डोर, Google
लेवाना चेन, Google
जेरेड फ़ाइंडर, Google
स्पेंसर क्विन, Google
निहाव जैन, Google
डिएगो टिपल्डी, Google
केन मैके, Google
डैनियल गुटेनबर्ग, क्वालकॉम
खास जानकारी
यह एक्सटेंशन, फ़िज़िकल क्यूआर कोड को ट्रैक करने और क्यूआर कोड के डेटा को डिकोड करने की सुविधा देता है.
सिस्टम की क्षमता की जांच करना
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
क्यूआर कोड को एक साथ ट्रैक किया जा सकता है.
कोई ऐप्लिकेशन यह देख सकता है कि सिस्टम में क्यूआर कोड ट्रैकिंग की सुविधा है या नहीं. इसके लिए, xrGetSystemProperties
को कॉल करते समय, XrSystemProperties
को XrSystemQrCodeTrackingPropertiesANDROID
स्ट्रक्चर के साथ बढ़ाया जाता है.
अगर supportsQrCodeTracking
, XR_FALSE
पर सेट है, तो रनटाइम को क्यूआर कोड ट्रैकर बनाने के लिए XR_ERROR_FEATURE_UNSUPPORTED
वैल्यू ज़रूर दिखानी चाहिए.
अगर कोई रनटाइम, क्यूआर कोड ट्रैकिंग की सुविधा के साथ काम करता है, तो उसे किसी भी समय maxQrCodeCount
ट्रैक किए गए क्यूआर कोड के साथ काम करना ज़रूरी है.
अगर कोई रनटाइम, क्यूआर कोड के साइज़ का अनुमान लगाने की सुविधा के साथ काम करता है, तो ऐप्लिकेशन XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
0
को सेट कर सकता है, ताकि साइज़ का अनुमान लगाने की सुविधा के इस्तेमाल के बारे में पता चल सके.
इसके अलावा, ऐप्लिकेशन को XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
को पॉज़िटिव वैल्यू पर सेट करना होगा या XR_ERROR_VALIDATION_FAILURE
को वापस कर दिया जाएगा.
मान्य इस्तेमाल (इंप्लिसिट)
XrSystemQrCodeTrackingPropertiesANDROID
का इस्तेमाल करने से पहले,XR_ANDROID_trackables_qr_code
एक्सटेंशन को चालू करना ज़रूरी हैtype
ज़रूरी है किXR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID
होnext
ज़रूरी है कि वहNULL
हो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो
क्यूआर कोड ट्रैक करना
यह एक्सटेंशन, XrTrackableTypeANDROID
में XR_TRACKABLE_TYPE_QR_CODE_ANDROID
जोड़ता है.
ऐप्लिकेशन, क्यूआर कोड को ट्रैक करने के लिए, xrCreateTrackableTrackerANDROID
को कॉल करके और XrTrackableTrackerCreateInfoANDROID::trackableType
में ट्रैक किए जा सकने वाले टाइप के तौर पर XR_TRACKABLE_TYPE_QR_CODE_ANDROID
को तय करके, XrTrackableTrackerANDROID
बना सकता है.
अगर XrTrackableTrackerCreateInfoANDROID::trackableType
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
है और XrSystemQrCodeTrackingPropertiesANDROID::supportsQrCodeTracking
, xrGetSystemProperties
के ज़रिए XR_FALSE
दिखाता है, तो रनटाइम को XR_ERROR_FEATURE_UNSUPPORTED
दिखाना ज़रूरी है.
XrTrackableQrCodeConfigurationANDROID
XrTrackableQrCodeConfigurationANDROID
स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
const void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
पैसे चुकाकर बने सदस्यों के लिए उपलब्ध सुविधाओं का ब्यौरा
type
इस स्ट्रक्चर काXrStructureType
है.next
,NULL
है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.trackingMode
एकXrQrCodeTrackingModeANDROID
है, जो ट्रैकिंग के लिए ज़रूरी मोड दिखाता है.qrCodeEdgeSize
से, क्यूआर कोड के किनारे का साइज़ मीटर में पता चलता है. अगर यह वैल्यू शून्य है, तो क्यूआर कोड के साइज़ का अनुमान ऑनलाइन लगाया जाएगा.
ऐप्लिकेशन को एक मान्य कॉन्फ़िगरेशन सेट करना ज़रूरी है. इसके लिए, उसे XrTrackableTrackerCreateInfoANDROID
की अगली चेन में XrTrackableQrCodeConfigurationANDROID
जोड़ना होगा.
ऐसा न होने पर, रनटाइम को XR_ERROR_VALIDATION_FAILURE
दिखाना ज़रूरी है.
अगर रनटाइम, क्यूआर कोड के साइज़ का अनुमान लगाने की सुविधा के साथ काम करता है, तो ऐप्लिकेशन, साइज़ का अनुमान लगाने की सुविधा के इस्तेमाल के बारे में बताने के लिए, XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
को 0
पर सेट कर सकता है.
इसके अलावा, ऐप्लिकेशन को XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
को पॉज़िटिव वैल्यू पर सेट करना होगा या XR_ERROR_VALIDATION_FAILURE
को वापस कर दिया जाएगा.
रनटाइम के दौरान, xrGetAllTrackablesANDROID
से मिले आउटपुट को फ़िल्टर करके, trackingMode
और qrCodeEdgeSize
से मैच करना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
XrTrackableQrCodeConfigurationANDROID
का इस्तेमाल करने से पहले,XR_ANDROID_trackables_qr_code
एक्सटेंशन को चालू करना ज़रूरी हैtype
ज़रूरी है किXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
होnext
ज़रूरी है कि वहNULL
हो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होtrackingMode
,XrQrCodeTrackingModeANDROID
की मान्य वैल्यू होनी चाहिए
XrQrCodeTrackingModeANDROID
XrQrCodeTrackingModeANDROID
enum, क्यूआर कोड के साथ काम करने वाले ट्रैकिंग मोड के बारे में बताता है.
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
| The QR Code is static and does not move. '
| XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID
| क्यूआर कोड डाइनैमिक है और यह बदल सकता है. |
क्यूआर कोड पाना
xrGetTrackableQrCodeANDROID
xrGetTrackableQrCodeANDROID
फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
पैरामीटर की जानकारी
tracker
, क्वेरी करने के लिएXrTrackableTrackerANDROID
है.getInfo
,XrTrackableGetInfoANDROID
है. इसमें ऐसी जानकारी होती है जिसका इस्तेमाल, ट्रैक किए जा सकने वाले क्यूआर कोड को पाने के लिए किया जाता है.qrCodeOutput
,XrTrackableQrCodeANDROID
स्ट्रक्चर का पॉइंटर है. इसमें ट्रैक किए जा सकने वाले क्यूआर कोड की जानकारी मिलती है.
अगर XrTrackableANDROID
का ट्रैक किया जा सकने वाला टाइप XR_TRACKABLE_TYPE_QR_CODE_ANDROID
नहीं है या XrTrackableTrackerANDROID
का ट्रैक किया जा सकने वाला टाइप XR_TRACKABLE_TYPE_QR_CODE_ANDROID
नहीं है, तो रनटाइम को XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
दिखाना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
xrGetTrackableQrCodeANDROID
को कॉल करने से पहले,XR_ANDROID_trackables_qr_code
एक्सटेंशन को चालू करना ज़रूरी है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
,XrTrackableGetInfoANDROID::baseSpace
में मौजूद क्यूआर कोड काXrPosef
है. क्यूआर कोड, XZ प्लैन में मौजूद है. इसमें X, क्यूआर कोड के दाईं ओर और Z, इसके निचले हिस्से की ओर इशारा करता है.extents
, क्यूआर कोड काXrExtent2Df
डाइमेंशन है. बाउंडिंग बॉक्स की सीमा इन पॉइंट पर है:centerPose
+/- (extents
/ 2).bufferCapacityInput
,buffer
या0
की वह क्षमता है जिससे ज़रूरी जानकारी को वापस पाया जा सकता है.bufferCountOutput
अगरbufferCapacityInput
0
है, तो रनटाइम, ज़रूरी बफ़र साइज़ कोbufferCountOutput
में लिखेगा. अगर ऐसा नहीं है, तो इसमेंbuffer
में लिखे गए कुल एलिमेंट शामिल होते हैं.buffer
, डिकोड किए गए क्यूआर कोड के डेटा को लिखने के लिए,char
के ऐरे का पॉइंटर है. ऐप्लिकेशन, ज़रूरी बफ़र का साइज़ तय करने के लिएnullptr
को पास कर सकता है. इसके अलावा, अगर क्यूआर कोड के डेटा को डिकोड करने का अनुरोध नहीं किया जा रहा है, तो भी ऐसा किया जा सकता है. क्यूआर कोड का डेटा, नल-टर्मिनेटेड UTF-8 स्ट्रिंग के तौर पर दिखता है.- ज़रूरत के मुताबिक
buffer
का साइज़ पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र के साइज़ के पैरामीटर सेक्शन देखें.
मान्य इस्तेमाल (इंप्लिसिट)
XrTrackableQrCodeANDROID
का इस्तेमाल करने से पहले,XR_ANDROID_trackables_qr_code
एक्सटेंशन को चालू करना ज़रूरी हैtype
ज़रूरी है किXR_TYPE_TRACKABLE_QR_CODE_ANDROID
होnext
ज़रूरी है कि वहNULL
हो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होtrackingState
,XrTrackingStateANDROID
की मान्य वैल्यू होनी चाहिए- अगर
bufferCapacityInput
0
नहीं है, तोbuffer
,bufferCapacityInput
char वैल्यू की किसी कैरेक्टर ऐरे का पॉइंटर होना चाहिए
ट्रैक किए जा सकने वाले क्यूआर कोड पाने के लिए उदाहरण कोड
यहां दिए गए उदाहरण कोड में, ट्रैक किए जा सकने वाले 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
समस्याएं
वर्शन इतिहास
- पहला संशोधन, 05-02-2025 (लेवाना चेन)
- एक्सटेंशन के बारे में शुरुआती जानकारी.
OpenXR™ और OpenXR लोगो, The Khronos Group Inc. के ट्रेडमार्क हैं. इन्हें चीन, यूरोपियन यूनियन, जापान, और यूनाइटेड किंगडम में ट्रेडमार्क के तौर पर रजिस्टर किया गया है.