XR_EXT_spatial_marker_tracking
Name String
XR_EXT_spatial_marker_tracking
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
744
बदलाव
1
पुष्टि की स्थिति
मंज़ूरी दी गई
एक्सटेंशन और वर्शन की डिपेंडेंसी
XR_EXT_spatial_entity
योगदान देने वाले
रॉन बेसेम्स, Meta
निहाव जैन, Google
नैटली फ़्लूरी, Meta
युइची तागुची, Meta
यिन ली, Microsoft
जिम्मी अलमपरामबिल, ByteDance
ज़िपेंग लियू, ByteDance
जून यान, ByteDance
खास जानकारी
यह एक्सटेंशन, XR_EXT_spatial_entity पर आधारित है. इससे ऐप्लिकेशन, अपने एनवायरमेंट में मार्कर का पता लगा सकते हैं और उन्हें ट्रैक कर सकते हैं. मार्कर, 2D कोड होते हैं. इनमें क्यूआर कोड, माइक्रो क्यूआर कोड, ArUco मार्कर या AprilTag शामिल हो सकते हैं.
ट्रैक किए गए मार्कर को एक स्पेशल एंटिटी के तौर पर दिखाया जाता है. इसमें ये कॉम्पोनेंट होते हैं:
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
रनटाइम की सुविधा
किसी रनटाइम को, xrEnumerateSpatialCapabilitiesEXT का इस्तेमाल करके, मार्कर ट्रैकिंग की अलग-अलग सुविधाओं के लिए सहायता का विज्ञापन ज़रूर देना चाहिए. इसके लिए, इनमें से कोई भी सुविधा शामिल करें:
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
कॉन्फ़िगरेशन
किसी मार्कर टाइप का पता लगाने की सुविधा चालू करने के लिए, ऐप्लिकेशन को xrCreateSpatialContextAsyncEXT को उससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर पास करना ज़रूरी है .
मार्कर टाइप कॉन्फ़िगरेशन
क्यूआर कोड
XrSpatialCapabilityConfigurationQrCodeEXT स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialCapabilityConfigurationQrCodeEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationQrCodeEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.capabilityज़रूरी तौर परXR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXTहोना चाहिए .enabledComponentCount,uint32_tहै. इसमेंenabledComponentsमें मौजूद एलिमेंट की संख्या होती है.enabledComponents, इस सुविधा के लिए चालू किए जाने वाले कॉम्पोनेंट की कैटगरी का पॉइंटर है.
अगर क्यूआर कोड इस्तेमाल किए जा सकते हैं, तो रनटाइम को क्यूआर कोड ट्रैकिंग की सुविधा चालू करनी होगी. ऐसा तब करना होगा, जब xrCreateSpatialContextAsyncEXT को कॉल करते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationQrCodeEXT स्ट्रक्चर पास किया गया हो.
अगर xrEnumerateSpatialCapabilitiesEXT, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT की गिनती नहीं करता है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationQrCodeEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT -
nextmust beNULLor a valid pointer to the next structure in a structure chain . यह भी देखें: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponents,enabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
माइक्रो क्यूआर कोड
XrSpatialCapabilityConfigurationMicroQrCodeEXT स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialCapabilityConfigurationMicroQrCodeEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMicroQrCodeEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.capabilityज़रूरी तौर परXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTहोना चाहिए .enabledComponentCount,uint32_tहै. इसमेंenabledComponentsमें मौजूद एलिमेंट की संख्या होती है.enabledComponents, इस सुविधा के लिए चालू किए जाने वाले कॉम्पोनेंट की कैटगरी का पॉइंटर है.
अगर माइक्रो क्यूआर कोड इस्तेमाल किए जा सकते हैं, तो रनटाइम को माइक्रो क्यूआर कोड ट्रैकिंग की सुविधा ज़रूर चालू करनी चाहिए. ऐसा तब करना चाहिए, जब xrCreateSpatialContextAsyncEXT को कॉल करते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationMicroQrCodeEXT स्ट्रक्चर पास किया गया हो.
अगर xrEnumerateSpatialCapabilitiesEXT, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT की गिनती नहीं करता है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationMicroQrCodeEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT -
nextmust beNULLor a valid pointer to the next structure in a structure chain . यह भी देखें: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponents,enabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
ArUco मार्कर
XrSpatialCapabilityConfigurationArucoMarkerEXT स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialCapabilityConfigurationArucoMarkerEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialMarkerArucoDictEXT arUcoDict;
} XrSpatialCapabilityConfigurationArucoMarkerEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.capabilityज़रूरी तौर परXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTहोना चाहिए .enabledComponentCount,uint32_tहै. इसमेंenabledComponentsमें मौजूद एलिमेंट की संख्या होती है.enabledComponents, इस सुविधा के लिए चालू किए जाने वाले कॉम्पोनेंट की कैटगरी का पॉइंटर है.arUcoDict, पहचान करने के लिए मार्कर डिक्शनरी है.
अगर ArUco मार्कर काम करते हैं, तो रनटाइम को ArUco मार्कर ट्रैकिंग की सुविधा चालू करनी होगी. ऐसा तब करना होगा, जब xrCreateSpatialContextAsyncEXT को कॉल करते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationArucoMarkerEXT स्ट्रक्चर पास किया गया हो.
अगर XrSpatialCapabilityConfigurationArucoMarkerEXT स्ट्रक्चर, XrSpatialContextCreateInfoEXT :: capabilityConfigs में है, लेकिन xrEnumerateSpatialCapabilitiesEXT से XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT की गिनती नहीं की जाती है, तो रनटाइम को xrCreateSpatialContextAsyncEXT से XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT वापस करना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationArucoMarkerEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT -
nextmust beNULLor a valid pointer to the next structure in a structure chain . यह भी देखें: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponents,enabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
arUcoDictmust be a valid XrSpatialMarkerArucoDictEXT value -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrSpatialMarkerArucoDictEXT इन्यूमरेशन को इस तरह परिभाषित किया गया है:
typedef enum XrSpatialMarkerArucoDictEXT {
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT = 1,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT = 2,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT = 3,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT = 4,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT = 5,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT = 6,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT = 7,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT = 8,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT = 9,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT = 10,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT = 11,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT = 12,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT = 13,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT = 14,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT = 15,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT = 16,
XR_SPATIAL_MARKER_ARUCO_DICT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMarkerArucoDictEXT;
पहले से तय की गई ArUco डिक्शनरी, इन पर काम करती है:
गिनती की गई वैल्यू की जानकारी
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT— 50 आईडी वाला 4x4 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT— यह 100 आईडी वाली, 4x4 पिक्सल की Aruco मार्कर डिक्शनरी है.XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT— 250 आईडी वाला, 4x4 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT— इसमें 1,000 आईडी के साथ 4x4 पिक्सल का Aruco मार्कर डिक्शनरी है.XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT— 50 आईडी वाला, 5 गुणा 5 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT— इसमें 100 आईडी के साथ 5x5 पिक्सल का Aruco मार्कर डिक्शनरी है.XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT— इसमें 250 आईडी के साथ 5x5 पिक्सल का Aruco मार्कर डिक्शनरी है.XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT— इसमें 1,000 आईडी के साथ 5x5 पिक्सल का Aruco मार्कर डिक्शनरी है.XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT— 50 आईडी वाला, 6 गुणा 6 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT— यह 6 गुणा 6 पिक्सल वाला Aruco मार्कर डिक्शनरी है. इसमें 100 आईडी हैं.XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT— 250 आईडी वाला 6x6 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT— 1,000 आईडी के साथ 6 गुणा 6 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT— 50 आईडी वाला, 7 गुणा 7 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT— इसमें 7x7 पिक्सल वाला Aruco मार्कर डिक्शनरी है, जिसमें 100 आईडी हैं.XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT— 250 आईडी वाला, 7 गुणा 7 पिक्सल का Aruco मार्कर डिक्शनरी.XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT— इसमें 7x7 पिक्सल वाला Aruco मार्कर डिक्शनरी है. इसमें 1,000 आईडी हैं.
AprilTags
XrSpatialCapabilityConfigurationAprilTagEXT स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialCapabilityConfigurationAprilTagEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialMarkerAprilTagDictEXT aprilDict;
} XrSpatialCapabilityConfigurationAprilTagEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.capabilityज़रूरी तौर परXR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXTहोना चाहिए .enabledComponentCount,uint32_tहै. इसमेंenabledComponentsमें मौजूद एलिमेंट की संख्या होती है.enabledComponents, इस सुविधा के लिए चालू किए जाने वाले कॉम्पोनेंट की कैटगरी का पॉइंटर है.aprilDict, पहचान करने के लिए मार्कर डिक्शनरी है.
अगर AprilTag काम करते हैं, तो रनटाइम को AprilTag ट्रैकिंग ज़रूर चालू करनी चाहिए. ऐसा तब होना चाहिए, जब xrCreateSpatialContextAsyncEXT को कॉल करते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationAprilTagEXT स्ट्रक्चर पास किया गया हो.
अगर XrSpatialCapabilityConfigurationAprilTagEXT स्ट्रक्चर, XrSpatialContextCreateInfoEXT :: capabilityConfigs में है, लेकिन xrEnumerateSpatialCapabilitiesEXT से XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT की गिनती नहीं की जाती है, तो रनटाइम को xrCreateSpatialContextAsyncEXT से XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT ज़रूर दिखाना चाहिए .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationAprilTagEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT -
nextmust beNULLor a valid pointer to the next structure in a structure chain . यह भी देखें: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponents,enabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
aprilDictmust be a valid XrSpatialMarkerAprilTagDictEXT value -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrSpatialMarkerAprilTagDictEXT इन्यूमरेशन को इस तरह से परिभाषित किया गया है:
typedef enum XrSpatialMarkerAprilTagDictEXT {
XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT = 1,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_25H9_EXT = 2,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H10_EXT = 3,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT = 4,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMarkerAprilTagDictEXT;
पहले से तय की गई AprilTag डिक्शनरी, इन पर काम करती है:
गिनती की गई वैल्यू की जानकारी
XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT— 4 x 4 बिट, किन्हीं दो कोड के बीच कम से कम हैमिंग दूरी = 5, 30 कोड.XR_SPATIAL_MARKER_APRIL_TAG_DICT_25H9_EXT— 5 गुणा 5 बिट, किसी भी दो कोड के बीच हैमिंग दूरी कम से कम 9, 35 कोड.XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H10_EXT— 6 x 6 बिट, किसी भी दो कोड के बीच हैमिंग दूरी कम से कम 10, 2320 कोड.XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT— 6 गुणा 6 बिट, किन्हीं दो कोड के बीच हैमिंग दूरी कम से कम 11, 587 कोड.
मार्कर के वैकल्पिक कॉन्फ़िगरेशन
ऐप्लिकेशन को xrEnumerateSpatialCapabilityFeaturesEXT को कॉल करना चाहिए, ताकि इस्तेमाल की जा सकने वाली वैकल्पिक सुविधाओं की सूची मिल सके.
किसी भी एक्सटेंशन के साथ काम करने वाली सभी स्पेशल कैपेबिलिटी सुविधाओं की पूरी सूची देखने के लिए, XrSpatialCapabilityFeatureEXT देखें.
मार्कर का साइज़
XrSpatialMarkerSizeEXT स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialMarkerSizeEXT {
XrStructureType type;
const void* next;
float markerSideLength;
} XrSpatialMarkerSizeEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.markerSideLengthसभी मार्कर का साइज़ मीटर में होता है.
अगर किसी सुविधा के लिए XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT को xrEnumerateSpatialCapabilityFeaturesEXT से गिना जाता है और ऐप्लिकेशन, XrSpatialMarkerSizeEXT को उस सुविधा के कॉन्फ़िगरेशन स्ट्रक्चर से जोड़ता है, तो रनटाइम को यह मानना होगा कि खोजे गए सभी मार्कर की चौड़ाई और ऊंचाई markerSideLength है . यह जानकारी रनटाइम को देने से, रनटाइम ज़्यादा सटीक पोज़ और साइज़ दिखा पाता है. इस स्ट्रक्चर को XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT या XrSpatialCapabilityConfigurationAprilTagEXT की next चेन में लिंक करना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialMarkerSizeEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_MARKER_SIZE_EXT -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो
स्टैटिक मार्कर ऑप्टिमाइज़ेशन
XrSpatialMarkerStaticOptimizationEXT स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialMarkerStaticOptimizationEXT {
XrStructureType type;
const void* next;
XrBool32 optimizeForStaticMarker;
} XrSpatialMarkerStaticOptimizationEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.optimizeForStaticMarkerसे पता चलता है कि स्पेस में मौजूद सभी मार्कर के अपनी जगह से न हिलने की उम्मीद है.
अगर किसी सुविधा के लिए XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT को xrEnumerateSpatialCapabilityFeaturesEXT से गिना जाता है और ऐप्लिकेशन, उस सुविधा के कॉन्फ़िगरेशन स्ट्रक्चर से XrSpatialMarkerStaticOptimizationEXT को जोड़ता है, तो रनटाइम को यह मानना होगा कि अगर optimizeForStaticMarker को XR_TRUE पर सेट किया गया है, तो सभी डिटेक्ट किए गए मार्कर स्टैटिक हैं . इससे रनटाइम को ज़्यादा सटीक पोज़ और साइज़ जनरेट करने में मदद मिलती है. इस स्ट्रक्चर को XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT या XrSpatialCapabilityConfigurationAprilTagEXT की next चेन में लिंक करना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialMarkerStaticOptimizationEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो
गारंटी वाले कॉम्पोनेंट
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT , XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT , XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT या XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT को सपोर्ट करने वाले रनटाइम को, इन क्षमताओं से मिली सभी इकाइयों के लिए, यहां दिए गए स्पेशल कॉम्पोनेंट उपलब्ध कराने ज़रूरी हैं. साथ ही, उन्हें xrEnumerateSpatialCapabilityComponentTypesEXT में शामिल करना ज़रूरी है :
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
मार्कर कॉम्पोनेंट
कॉम्पोनेंट का डेटा
XrSpatialMarkerDataEXT स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialMarkerDataEXT {
XrSpatialCapabilityEXT capability;
uint32_t markerId;
XrSpatialBufferEXT data;
} XrSpatialMarkerDataEXT;
सदस्यों के बारे में जानकारी
capability, XrSpatialCapabilityEXT है. इसने मार्कर का पता लगाया है.markerId, मार्कर से मिला एन्कोड किया गया आइडेंटिफ़ायर है. ArUco मार्कर और AprilTag के लिए, इस फ़ील्ड में मान्य आईडी होना चाहिए और इसे एन्कोड किए गए आईडी से भरा जाना चाहिए. क्यूआर कोड के लिए, इस फ़ील्ड की वैल्यू शून्य होनी चाहिए.dataबफ़र आईडी है और मार्कर में मौजूद अतिरिक्त जानकारी का टाइप है.
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT और XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT में अतिरिक्त डेटा भी शामिल किया जा सकता है. अगर capability इनमें से कोई एक है, तो -
- अगर रनटाइम ने मार्कर के लिए डेटा को डिकोड कर लिया है, तो उसे मार्कर में मौजूद डेटा के आधार पर ,
dataबफ़र टाइप कोXR_SPATIAL_BUFFER_TYPE_UINT8_EXTयाXR_SPATIAL_BUFFER_TYPE_STRING_EXTपर सेट करना ज़रूरी है. रनटाइम कोdataमें एक मान्य बफ़र आईडी भी सेट करना ज़रूरी है. ऐप्लिकेशन, डेटा पाने के लिए सहीxrGetSpatialBuffer*फ़ंक्शन के साथ इस आईडी का इस्तेमाल कर सकता है. - अगर रनटाइम ने मार्कर के डेटा को अभी तक डिकोड नहीं किया है, तो उसे
dataबफ़र आईडी को XR_NULL_SPATIAL_BUFFER_ID_EXT और बफ़र टाइप कोXR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXTपर सेट करना ज़रूरी है .
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT और XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT, अतिरिक्त डेटा के साथ काम नहीं करते. साथ ही, रनटाइम को data के बफ़र आईडी को XR_NULL_SPATIAL_BUFFER_ID_EXT पर सेट करना होगा.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialMarkerDataEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
datamust be a valid XrSpatialBufferEXT structure
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर
XrSpatialComponentMarkerListEXT स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialComponentMarkerListEXT {
XrStructureType type;
void* next;
uint32_t markerCount;
XrSpatialMarkerDataEXT* markers;
} XrSpatialComponentMarkerListEXT;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.markerCount,markersमेंबर में मौजूद एलिमेंट की संख्या है.markers, XrSpatialMarkerDataEXT का एक कलेक्शन है .
ऐप्लिकेशन, XrSpatialSnapshotEXT में मौजूद स्पेशल एंटिटी के मार्कर कॉम्पोनेंट के बारे में क्वेरी कर सकता है. इसके लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT जोड़ें. साथ ही, XrSpatialComponentDataQueryResultEXT के अगले पॉइंटर चेन में XrSpatialComponentMarkerListEXT जोड़ें.
अगर XrSpatialComponentMarkerListEXT, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE वापस भेजना ज़रूरी है .
अगर markerCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT ज़रूर लौटाना चाहिए .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialComponentMarkerListEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_marker_trackingएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
markersज़रूरी है कि यहmarkerCountXrSpatialMarkerDataEXT स्ट्रक्चर के ऐरे का पॉइंटर हो -
markerCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन
अगर किसी सुविधा के लिए XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT को XrSpatialCapabilityComponentTypesEXT :: componentTypes में शामिल किया गया है, तो कोई ऐप्लिकेशन इसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents की सूची में एन्यूमरेंट को शामिल करना होगा. यह सूची, XrSpatialCapabilityConfigurationBaseHeaderEXT से मिले उस स्ट्रक्चर की होगी जो इस कॉम्पोनेंट के साथ काम करता है.
इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT :: next चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.
बाउंडेड 2D कॉम्पोनेंट
बाउंडेड 2D कॉम्पोनेंट, उस मार्कर का सेंटर और एक्सटेंट देता है जिसे यह कॉम्पोनेंट दिखाता है. बाउंडेड 2D कॉम्पोनेंट के बारे में ज़्यादा जानने के लिए, बाउंडेड 2D देखें.
XrSpatialBounded2DDataEXT :: center मार्कर के बीच में होना चाहिए. मार्कर के सामने वाले हिस्से को देखते समय, X-ऐक्सिस ज़रूर दाईं ओर और Y-ऐक्सिस ज़रूर मार्कर के सबसे ऊपर की ओर होना चाहिए. रनटाइम को, राइट-हैंडेड कोऑर्डिनेट सिस्टम के कन्वेंशन का पालन करना चाहिए. इसलिए, Z-ऐक्सिस मार्कर के सामने वाले हिस्से से बाहर निकलता है. इसका मतलब है कि {0, 0, 0} पोज़िशन, {0, 0, 0, 1} रोटेशन (कोई रोटेशन नहीं), और {1, 1} साइज़ वाला मार्कर, 1 मीटर x 1 मीटर के मार्कर को दिखाता है. यह मार्कर, कॉम्पोनेंट के स्पेस में {0, 0, 0} पर सेंटर किया गया है. साथ ही, इसका फ़्रंट फ़ेस नॉर्मल वेक्टर, +Z दिशा की ओर पॉइंट कर रहा है.
नीचे मार्कर के ओरिएंटेशन के बारे में बताया गया है.
इमेज 25. ऐक्सिस के साथ क्यूआर कोड मार्कर
टेस्ट कोड
नीचे दिए गए कोड के लिए, यह ज़रूरी है कि उनका X-Y प्लैन दस्तावेज़ के अंदर हो और Z-ऐक्सिस, व्यूअर की ओर पॉइंट कर रहा हो. ऐक्सिस ओरिजिन, हर मार्कर के बीच में दिखना चाहिए. X-ऐक्सिस दाईं ओर और Y-ऐक्सिस दस्तावेज़ के सबसे ऊपर की ओर होना चाहिए.
इमेज 26. 'OpenXR' टेक्स्ट वाला क्यूआर कोड
इमेज 27. AprilTag XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT, आईडी 42 के साथ
इमेज 28. ArUco मार्कर XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT, आईडी 43 के साथ
कोड का उदाहरण
क्यूआर कोड ट्रैकिंग की सुविधा कॉन्फ़िगर करना
यहां दिए गए उदाहरण कोड में, स्पेस के हिसाब से कॉन्टेक्स्ट बनाते समय, क्यूआर कोड ट्रैकिंग की सुविधा को कॉन्फ़िगर करने का तरीका बताया गया है.
// Check if marker tracking capability is supported
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT) == capabilities.end()) {
return;
}
uint32_t featureCount = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> capabilityFeatures(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT, featureCount, &featureCount, capabilityFeatures.data()));
bool supportsFixedMarkerSize = std::find(capabilityFeatures.begin(), capabilityFeatures.end(), XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT) != capabilityFeatures.end();
// Create a spatial context
XrSpatialContextEXT spatialContext{};
// Enable the 2 guaranteed components of the qr code tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT,
};
XrSpatialCapabilityConfigurationQrCodeEXT markerConfiguration{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT};
markerConfiguration.capability = XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT;
markerConfiguration.enabledComponentCount = static_cast<uint32_t>(enabledComponents.size());
markerConfiguration.enabledComponents = enabledComponents.data();
// only chained if features.markerSideLength is true.
XrSpatialMarkerSizeEXT markerSize{XR_TYPE_SPATIAL_MARKER_SIZE_EXT};
markerSize.markerSideLength = 0.10f;
if (supportsFixedMarkerSize) {
markerConfiguration.next = &markerSize;
}
std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&markerConfiguration),
};
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
// ...
// Discovery entities with the spatial context
// ...
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
स्पेशल एंटिटी और क्वेरी कॉम्पोनेंट का डेटा ढूंढना
यहां दिए गए उदाहरण कोड में, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT के साथ कॉन्फ़िगर किए गए किसी कॉन्टेक्स्ट के लिए, स्पेशल एंटिटी ढूंढने और उसके कॉम्पोनेंट डेटा के बारे में क्वेरी करने का तरीका बताया गया है.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
// We want to look for entities that have the following components.
std::vector<XrSpatialComponentTypeEXT> snapshotComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT,
};
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2D and marker component data
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = snapshotComponents.size();
queryCond.componentTypes = snapshotComponents.data();
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2D(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT bounded2DList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
bounded2DList.boundCount = bounded2D.size();
bounded2DList.bounds = bounded2D.data();
queryResult.next = &bounded2DList;
std::vector<XrSpatialMarkerDataEXT> markers;
XrSpatialComponentMarkerListEXT markerList{XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT};
markers.resize(queryResult.entityIdCountOutput);
markerList.markerCount = markers.size();
markerList.markers = markers.data();
bounded2DList.next = &markerList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] != XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
continue;
}
// 2D bounds for entity entityIds[i] is bounded2D[i].extents centered on bounded2D[i].center.
if (markers[i].capability == XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT) {
// Check if marker data has been decoded.
if (markers[i].data.bufferId != XR_NULL_SPATIAL_BUFFER_ID_EXT) {
if (markers[i].data.bufferType == XR_SPATIAL_BUFFER_TYPE_STRING_EXT) {
// Qr Code data can be queried using
// XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
// info.bufferId = markers[i].data.bufferId;
// xrGetSpatialBufferStringEXT(completion.snapshot, &getInfo, ...)
} else if (markers[i].data.bufferType == XR_SPATIAL_BUFFER_TYPE_UINT8_EXT) {
// Qr Code data can be queried using
// XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
// info.bufferId = markers[i].data.bufferId;
// xrGetSpatialBufferUint8(completion.snapshot, &getInfo, ...)
}
}
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
नई संरचनाएं
- XrSpatialCapabilityConfigurationAprilTagEXT
- XrSpatialCapabilityConfigurationArucoMarkerEXT
- XrSpatialCapabilityConfigurationMicroQrCodeEXT
- XrSpatialCapabilityConfigurationQrCodeEXT
- XrSpatialMarkerDataEXT
XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT को एक्सटेंड करना :
XrSpatialComponentDataQueryResultEXT की अवधि बढ़ाई जा रही है :
नए एनम
नए Enum कॉन्सटेंट
XR_EXT_SPATIAL_MARKER_TRACKING_EXTENSION_NAMEXR_EXT_spatial_marker_tracking_SPEC_VERSIONXrSpatialCapabilityEXT को बढ़ाना :
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
XrSpatialCapabilityFeatureEXT को बढ़ाना :
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXTXR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
XrSpatialComponentTypeEXT को बढ़ाना :
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
XrStructureType को बढ़ाना :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXTXR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXTXR_TYPE_SPATIAL_MARKER_SIZE_EXTXR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT
वर्शन हिस्ट्री
पहला संशोधन, 29-07-2024 (रॉन बेसेम्स, Meta)
- एक्सटेंशन की शुरुआती जानकारी