XR_ANDROID_trackables_qr_code OpenXR एक्सटेंशन

Name String

XR_ANDROID_trackables_qr_code

एक्सटेंशन टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

460

बदलाव

1

एक्सटेंशन और वर्शन की डिपेंडेंसी

XR_ANDROID_trackables

पिछली बार बदलाव किए जाने की तारीख

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. के ट्रेडमार्क हैं. इन्हें चीन, यूरोपियन यूनियन, जापान, और यूनाइटेड किंगडम में ट्रेडमार्क के तौर पर रजिस्टर किया गया है.