XR_ANDROID_trackables_qr_code
नाम की स्ट्रिंग
XR_ANDROID_trackables_qr_code
एक्सटेंशन का टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किए गए एक्सटेंशन का नंबर
709
संशोधन
1
पुष्टि की स्थिति
पुष्टि नहीं की गई
एक्सटेंशन और वर्शन की ज़रूरी शर्तें
XR_ANDROID_trackables
बंद होने की स्थिति
XR_EXT_spatial_marker_trackingएक्सटेंशन की मदद से बंद किया गया
पिछली बार बदलाव किए जाने की तारीख
2025-02-05
आईपी की स्थिति
आईपी से जुड़े किसी दावे की जानकारी नहीं है.
योगदान देने वाले
क्रिस्टोफ़र डोअर, Google
लेवाना चेन, Google
जेरेड फ़ाइंडर, Google
स्पेंसर क्विन, Google
निहाव जैन, Google
डिएगो टिपाल्डी, Google
केन मैके, Google
डैनियल गुटेनबर्ग, Qualcomm
खास जानकारी
इस एक्सटेंशन की मदद से, फ़िज़िकल क्यूआर कोड को ट्रैक किया जा सकता है और क्यूआर कोड के डेटा को डिकोड किया जा सकता है.
अनुमतियां
Android ऐप्लिकेशन के मेनिफ़ेस्ट में, android.permission.SCENE_UNDERSTANDING_COARSE अनुमति ज़रूर शामिल होनी चाहिए. ऐसा इसलिए, क्योंकि यह एक्सटेंशन XR_ANDROID_trackables पर निर्भर करता है और एनवायरमेंट की ज्यामिति दिखाता है. android.permission.SCENE_UNDERSTANDING_COARSE अनुमति को खतरनाक अनुमति माना जाता है.
(सुरक्षा का लेवल: खतरनाक)
सिस्टम की क्षमता की जांच करना
XrSystemQrCodeTrackingPropertiesANDROID स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint16_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
सदस्यों की जानकारी
typeइस स्ट्रक्चर का XrStructureType है.nextNULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के कोर या इस एक्सटेंशन में, ऐसे कोई स्ट्रक्चर तय नहीं किए गए हैं.supportsQrCodeTrackingएकXrBool32है. इससे पता चलता है कि मौजूदा सिस्टम में क्यूआर कोड ट्रैकिंग की सुविधा है या नहीं.supportsQrCodeSizeEstimationएकXrBool32है. इससे पता चलता है कि मौजूदा सिस्टम में क्यूआर कोड के साइज़ का अनुमान लगाने की सुविधा है या नहीं.maxQrCodeCountक्यूआर कोड की वह कुल ज़्यादा से ज़्यादा संख्या है जिन्हें एक साथ ट्रैक किया जा सकता है.
xrGetSystemProperties को कॉल करते समय, XrSystemProperties को XrSystemQrCodeTrackingPropertiesANDROID स्ट्रक्चर के साथ बढ़ाकर, कोई ऐप्लिकेशन यह देख सकता है कि सिस्टम में क्यूआर कोड ट्रैकिंग की सुविधा है या नहीं. अगर supportsQrCodeTracking की वैल्यू XR_FALSE है, तो रनटाइम को क्यूआर कोड ट्रैकर बनाने के लिए, XR_ERROR_FEATURE_UNSUPPORTED ज़रूर दिखाना चाहिए. ऐसा सिर्फ़ तब होगा, जब supportsQrCodeTracking की वैल्यू XR_FALSE होगी.
अगर कोई रनटाइम, क्यूआर कोड ट्रैकिंग की सुविधा देता है, तो maxQrCodeCount की वैल्यू कम से कम 1 ज़रूर होनी चाहिए. अगर कोई रनटाइम, क्यूआर कोड ट्रैकिंग की सुविधा नहीं देता है, तो maxQrCodeCount की वैल्यू 0 ज़रूर होनी चाहिए.
मान्य इस्तेमाल (सीधे तौर पर न दिखाना)
- 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 को कॉल करके और XR_TRACKABLE_TYPE_QR_CODE_ANDROID में ट्रैक किए जा सकने वाले टाइप के तौर पर XrTrackableTrackerCreateInfoANDROID :: trackableType तय करके, ऐप्लिकेशन XrTrackableTrackerANDROID बना सकता है, ताकि क्यूआर कोड ट्रैक किए जा सकें.
अगर XrTrackableTrackerCreateInfoANDROID :: trackableType की वैल्यू XR_TRACKABLE_TYPE_QR_CODE_ANDROID है और xrGetSystemProperties के ज़रिए, XrSystemQrCodeTrackingPropertiesANDROID :: supportsQrCodeTracking की वैल्यू XR_FALSE है, तो रनटाइम को XR_ERROR_FEATURE_UNSUPPORTED ज़रूर दिखाना चाहिए .
XrTrackableQrCodeConfigurationANDROID स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
सदस्यों की जानकारी
typeइस स्ट्रक्चर का XrStructureType है.nextNULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के कोर या इस एक्सटेंशन में, ऐसे कोई स्ट्रक्चर तय नहीं किए गए हैं.trackingModeएक XrQrCodeTrackingModeANDROID है. इससे, ट्रैकिंग के लिए मनचाहे मोड के बारे में पता चलता है.qrCodeEdgeSizeसे, क्यूआर कोड के किनारे का साइज़ मीटर में पता चलता है. अगर इसकी वैल्यू शून्य है, तो रनटाइम ऑनलाइन क्यूआर कोड के साइज़ का अनुमान लगाता है.
XrTrackableTrackerCreateInfoANDROID की अगली चेन में, XrTrackableQrCodeConfigurationANDROID जोड़कर, ऐप्लिकेशन को मान्य कॉन्फ़िगरेशन सेट करना होगा . ऐसा न करने पर, रनटाइम को XR_ERROR_VALIDATION_FAILURE ज़रूर दिखाना चाहिए .
अगर रनटाइम, क्यूआर कोड के साइज़ का अनुमान लगाने की सुविधा देता है, तो ऐप्लिकेशन सेट XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize की वैल्यू 0.0 सेट कर सकता है, ताकि साइज़ का अनुमान लगाने की सुविधा के इस्तेमाल के बारे में पता चल सके.
अगर रनटाइम, क्यूआर कोड के साइज़ का अनुमान लगाने की सुविधा नहीं देता है, तो ऐप्लिकेशन को ज़रूर XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize की वैल्यू कोई पॉज़िटिव वैल्यू सेट करनी होगी. ऐसा न करने पर, रनटाइम को ज़रूर XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.
रनटाइम को trackingMode से मैच करने के लिए, xrGetAllTrackablesANDROID के आउटपुट को फ़िल्टर करना होगा . अगर XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize की वैल्यू 0.0 सेट नहीं की गई है, तो रनटाइम को सिर्फ़ वे क्यूआर कोड दिखाने होंगे जो इस साइज़ से मैच करते हैं. अगर XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize की वैल्यू 0.0 सेट की गई है, तो रनटाइम को अनुमानित साइज़ वाले सभी क्यूआर कोड दिखाने होंगे.
मान्य इस्तेमाल (सीधे तौर पर न दिखाना)
- XrTrackableQrCodeConfigurationANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_qr_codeएक्सटेंशन ज़रूर चालू होना चाहिए -
typeकी वैल्यूXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID -
nextकी वैल्यूNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होनी चाहिए . यह भी देखें: XrTrackableQrCodeVersionFilterQCOM -
trackingModeकी वैल्यू, XrQrCodeTrackingModeANDROID की कोई मान्य वैल्यू **ज़रूर** होनी चाहिए
XrQrCodeTrackingModeANDROID enum से, क्यूआर कोड के ट्रैक किए जा सकने वाले मोड के बारे में पता चलता है.
typedef enum XrQrCodeTrackingModeANDROID {
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID = 0,
XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID = 1,
XR_QR_CODE_TRACKING_MODE_ANCHORED_QCOM = 1000314000,
XR_QR_CODE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrQrCodeTrackingModeANDROID;
Enumerant की जानकारी
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID— डाइनैमिक क्यूआर कोड ट्रैक करना. इस मोड में, सबसे सटीक नतीजे मिलते हैं. साथ ही, यह चलते-फिरते और स्थिर क्यूआर कोड, दोनों पर काम करता है. हालांकि, इसमें सबसे ज़्यादा बैटरी खर्च होती है.XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID— स्थिर क्यूआर कोड ट्रैक करना. यह मोड मुख्य तौर पर उन क्यूआर कोड के लिए काम का है जो स्थिर होते हैं. इससे, डाइनैमिक मोड की तुलना में कम बैटरी खर्च होती है.XR_QR_CODE_TRACKING_MODE_ANCHORED_QCOM— इस मोड का इस्तेमाल उन क्यूआर कोड के लिए किया जाना चाहिए जो स्थिर होते हैं. स्थिर मोड के उलट, यह मोड क्यूआर कोड को सिर्फ़ एक बार ट्रैक करेगा. इसके बाद, ट्रैक किए गए इंस्टेंस की पोज़िशन को सिर्फ़ डिवाइस की पोज़िशन के आधार पर अपडेट करेगा. नतीजतन, रेफ़रंस फ़्रेम से क्यूआर कोड के बाहर चले जाने पर भी, ट्रैकिंग जारी रहती है. क्यूआर कोड को ट्रैक करने के बाद, इसमें बहुत कम बैटरी खर्च होती है. (इसेXR_QCOM_trackables_qr_code_operationsएक्सटेंशन ने जोड़ा है)
क्यूआर कोड पाना
xrGetTrackableQrCodeANDROID फ़ंक्शन को इस तरह से तय किया गया है:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
पैरामीटर की जानकारी
trackerवह XrTrackableTrackerANDROID है जिसके बारे में क्वेरी करनी है.getInfoवह XrTrackableGetInfoANDROID है जिसमें ट्रैक किए जा सकने वाले क्यूआर कोड को पाने के लिए इस्तेमाल की गई जानकारी होती है.qrCodeOutputXrTrackableQrCodeANDROID स्ट्रक्चर का पॉइंटर है. इसमें, ट्रैक किए जा सकने वाले क्यूआर कोड की जानकारी मिलती है.
अगर 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 स्ट्रक्चर का कोई पॉइंटर **ज़रूर** होनी चाहिए
रिस्पॉन्स कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
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 है.nextNULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के कोर या इस एक्सटेंशन में, ऐसे कोई स्ट्रक्चर तय नहीं किए गए हैं.trackingStateक्यूआर कोड का XrTrackingStateANDROID है.lastUpdatedTimeक्यूआर कोड के आखिरी अपडेट काXrTimeहै. अगरlastUpdatedTimeकी वैल्यू, पिछली बार कॉल करने के बाद बदल गई है, तो हो सकता है कि अन्य सभी फ़ील्ड की वैल्यू भी बदल गई हो.centerPoseXrTrackableGetInfoANDROID ::baseSpaceमें मौजूद क्यूआर कोड का XrPosef है . क्यूआर कोड, XZ प्लेन में मौजूद होता है. इसमें X, क्यूआर कोड के दाईं ओर, Z, क्यूआर कोड के निचले हिस्से की ओर, और Y, क्यूआर कोड से बाहर की ओर नॉर्मल के तौर पर होता है.extentsक्यूआर कोड के XrExtent2Df डाइमेंशन हैं. बाउंडिंग बॉक्स की सीमा, इन पॉइंट पर होती है:centerPose+/- (extents/ 2).bufferCapacityInput,bufferकी क्षमता है. इसके अलावा, ज़रूरी क्षमता पाने के लिए इसकी वैल्यू0भी हो सकती है.bufferCountOutputअगरbufferCapacityInputकी वैल्यू0है, तो रनटाइम, ज़रूरी बफ़र साइज़ कोbufferCountOutputमें लिखेगा . इसके अलावा, इसमेंbufferमें लिखे गए कुल एलिमेंट शामिल होते हैं . अगर क्यूआर कोड का डेटा अब तक डिकोड नहीं किया गया है, तो रनटाइम को bufferCountOutput की वैल्यू 0 सेट करनी होगी.buffer, डिकोड किए गए क्यूआर कोड के डेटा को लिखने के लिए,charके कलेक्शन का पॉइंटर है. अगर ऐप्लिकेशन को डिकोड किए गए क्यूआर कोड के डेटा की ज़रूरत नहीं है, तो वहnullptrपास कर सकता है और दो बार कॉल करने की दूसरी कॉल को छोड़ सकता है. क्यूआर कोड का डेटा, नल से खत्म होने वाली UTF-8 स्ट्रिंग के तौर पर मिलता है.- ज़रूरी
bufferसाइज़ पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ के पैरामीटर वाला सेक्शन देखें.
मान्य इस्तेमाल (सीधे तौर पर न दिखाना)
- XrTrackableQrCodeANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_qr_codeएक्सटेंशन ज़रूर चालू होना चाहिए -
typeकी वैल्यूXR_TYPE_TRACKABLE_QR_CODE_ANDROID -
nextकी वैल्यूNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होनी चाहिए . यह भी देखें: XrTrackableQrCodeVersionQCOM -
trackingStateकी वैल्यू, XrTrackingStateANDROID की कोई मान्य वैल्यू **ज़रूर** होनी चाहिए - अगर
bufferCapacityInputकी वैल्यू0नहीं है, तोbufferकी वैल्यू,bufferCapacityInputchar वैल्यू के कलेक्शन का कोई पॉइंटर ज़रूर होनी चाहिए
ट्रैक किए जा सकने वाले क्यूआर कोड पाने के लिए, कोड का उदाहरण
यहां दिए गए कोड के उदाहरण से, ट्रैक किए जा सकने वाले क्यूआर कोड पाने का तरीका पता चलता है.
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, {
.type = XR_TYPE_TRACKABLE_QR_CODE_ANDROID,
.next = nullptr,
.bufferCountOutput = 0,
});
uint32_t qrCodeSize = 0;
CHK_XR(xrGetAllTrackablesANDROID(qrCodeTracker, qrCodeProperty.maxQrCodeCount, &qrCodeSize,
trackables.data()));
for (int i = 0; i < qrCodeSize; i++) {
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));
नए निर्देश
नए स्ट्रक्चर
- XrTrackableQrCodeANDROID
XrSystemProperties को बढ़ाना :
XrTrackableTrackerCreateInfoANDROID को बढ़ाना :
नए Enums
नए Enum कॉन्सटेंट
XR_ANDROID_TRACKABLES_QR_CODE_EXTENSION_NAMEXR_ANDROID_trackables_qr_code_SPEC_VERSIONXrStructureType को बढ़ाना :
XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
XrTrackableTypeANDROID को बढ़ाना :
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
समस्याएं
वर्शन हिस्ट्री
संशोधन 1, 5 फ़रवरी, 2025 (लेवाना चेन)
- एक्सटेंशन की शुरुआती जानकारी.