XR_EXT_spatial_object_tracking
Name String
XR_EXT_spatial_object_tracking
एक्सटेंशन का टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
745
बदलाव
1
पुष्टि की स्थिति
मंज़ूरी नहीं मिली
एक्सटेंशन और वर्शन डिपेंडेंसी
XR_EXT_spatial_entity
आईपी स्टेटस
बौद्धिक संपत्ति से जुड़े किसी दावे की जानकारी नहीं है.
योगदान देने वाले
निहाव जैन, Google
नैटली फ़्ल्यूरी, Meta
यूइची तागुची, Meta
रॉन बेसेम्स, Meta
यिन ली, Microsoft
जिमी आलमपरमबिल, ByteDance
ज़ीपेंग लियू, ByteDance
जुन यान, ByteDance
एंडी बियर, Unity Technologies
रेबेका नॉर्डहाउज़र, Unity Technologies
खास जानकारी
यह एक्सटेंशन XR_EXT_spatial_entity पर आधारित है. यह पहले से तय किए गए ऑब्जेक्ट के सेट को ट्रैक करने के लिए, स्पेशल कैपेबिलिटी तय करता है. इसके लिए, ऐप्लिकेशन से इनपुट डेटासेट की ज़रूरत नहीं होती.
रनटाइम से जुड़ी सहायता
अगर रनटाइम में ऑब्जेक्ट ट्रैकिंग की सुविधा काम करती है, तो उसे xrEnumerateSpatialCapabilitiesEXT में XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT को शामिल करके, इसकी जानकारी ज़रूर देनी चाहिए.
कॉन्फ़िगरेशन
XrSpatialCapabilityConfigurationObjectTrackingEXT स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSpatialCapabilityConfigurationObjectTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationObjectTrackingEXT;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.capability, XrSpatialCapabilityEXT है और यहXR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXTहोना चाहिए .enabledComponentCountएकuint32_tहै, जोenabledComponentsकलेक्शन में मौजूद एलिमेंट की संख्या बताता है.enabledComponents, XrSpatialComponentTypeEXT के कलेक्शन का पॉइंटर है.
ऐप्लिकेशन, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT की स्पेशल सुविधा को चालू कर सकते हैं. इसके लिए, उन्हें XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationObjectTrackingEXT स्ट्रक्चर में एक पॉइंटर जोड़ना होगा.
अगर capability, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना ज़रूरी है.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationObjectTrackingEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_object_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXTहोनी चाहिए -
nextकोNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए. यह भी देखें: XrSpatialFeatureObjectSemanticLabelSubsetEXT -
capabilityकी वैल्यू, XrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponentsकोenabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
गारंटी वाले कॉम्पोनेंट
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT के साथ काम करने वाले रनटाइम को, यहां दिए गए स्पेशल कॉम्पोनेंट के साथ ज़रूर काम करना चाहिए. ये कॉम्पोनेंट, इस सुविधा से खोजी गई इकाइयों के गारंटी वाले कॉम्पोनेंट के तौर पर काम करते हैं. साथ ही, इन्हें xrEnumerateSpatialCapabilityComponentTypesEXT में ज़रूर शामिल करना चाहिए:
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT- कम से कम एक कॉम्पोनेंट टाइप, जो ट्रैक किए गए ऑब्जेक्ट के लिए सिमैंटिक लेबल का सेट उपलब्ध कराता है. सिमैंटिक लेबल कॉम्पोनेंट के बिना, ऑब्जेक्ट ट्रैकिंग की सुविधा का कोई मतलब नहीं है. यह एक्सटेंशन,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTऔरXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTको सिमैंटिक लेबल के कॉम्पोनेंट के तौर पर तय करता है, ताकि रनटाइम के दौरान इनका इस्तेमाल किया जा सके. हालांकि, अन्य एक्सटेंशन नए कॉम्पोनेंट टाइप तय कर सकते हैं, ताकि सिमैंटिक लेबल की अलग-अलग क्लास उपलब्ध कराई जा सकें. ये क्लास, ट्रैक किए गए ऑब्जेक्ट के बारे में जानकारी देती हैं. सिमैंटिक लेबल सेट और कॉम्पोनेंट टाइप के डिज़ाइन के बारे में ज़्यादा जानने के लिए, [ext_spatial_semantic_labels_guidelines] देखें. ऐसा हो सकता है कि रनटाइम, ऑब्जेक्ट ट्रैकिंग की सुविधा के लिएXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTयाXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT, दोनों के साथ काम न करे. हालांकि, यह ज़रूरी है कि वह कम से कम एक ऐसे कॉम्पोनेंट टाइप के साथ काम करे जो सिमैंटिक लेबल उपलब्ध कराता हो.
बाउंडेड 3D कॉम्पोनेंट
बाउंडेड 3D कॉम्पोनेंट, उस ऑब्जेक्ट के सेंटर और एक्सटेंट की जानकारी देता है जिसे वह इकाई दिखाती है जिस पर वह मौजूद है. ज़्यादा जानकारी के लिए, बाउंडेड 3D देखें.
वैकल्पिक कॉम्पोनेंट
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT के साथ काम करने वाला रनटाइम, गारंटी वाले कॉम्पोनेंट सेक्शन में दिए गए कॉम्पोनेंट के अलावा, स्पेशल कॉम्पोनेंट के साथ भी काम कर सकता है. ऐप्लिकेशन, xrEnumerateSpatialCapabilityComponentTypesEXT का इस्तेमाल करके, रनटाइम के साथ काम करने वाले कॉम्पोनेंट की पूरी सूची देख सकता है. इसके बाद, स्पेशल कॉन्टेक्स्ट बनाते समय, अपनी पसंद के कॉम्पोनेंट कॉन्फ़िगर कर सकता है.
ऑब्जेक्ट का सिमैंटिक लेबल
कॉम्पोनेंट का डेटा
typedef enum XrSpatialObjectSemanticLabelEXT {
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT = 2,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_BED_EXT = 3,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CHAIR_EXT = 4,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAMP_EXT = 6,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_PLANT_EXT = 7,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT = 8,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT = 9,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CABINET_EXT = 10,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialObjectSemanticLabelEXT;
XrSpatialObjectSemanticLabelEXT एन्यूमरेशन, ऑब्जेक्ट के लिए सिमैंटिक लेबल के सेट के बारे में बताता है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT लेबल वाली इकाइयों के लिए, बाउंडेड 3D कॉम्पोनेंट का +Z ऐक्सिस, स्क्रीन के सामान्य सतह से ज़रूर मेल खाना चाहिए.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT लेबल वाली इकाइयों के लिए, Bounded 3D कॉम्पोनेंट का +Z ऐक्सिस, उस दीवार के सरफ़ेस नॉर्मल से ज़रूर मैच होना चाहिए जिस पर आर्ट मौजूद है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT लेबल वाली इकाइयों के लिए, बाउंडेड 3D कॉम्पोनेंट का +Z ऐक्सिस, टेबल के सरफ़ेस नॉर्मल से मैच होना चाहिए.
XrSpatialObjectSemanticLabelEXT में मौजूद अन्य सभी लेबल के लिए, ऐप्लिकेशन को इस बारे में कोई अनुमान नहीं लगाना चाहिए कि एंटिटी पर Bounded 3D कॉम्पोनेंट से मिला XrBoxf :: center :: orientation, उस ऑब्जेक्ट की असल विशेषताओं के साथ कैसे अलाइन होता है.
एनुमरेशन वैल्यू के ये मतलब होते हैं:
Enum की जानकारी
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT
रनटाइम इस इकाई को कैटगरी में नहीं बांट सका.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT
इकाई एक सोफ़ा है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_BED_EXT
इकाई एक बेड है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CHAIR_EXT
इकाई एक कुर्सी है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT
इकाई एक टेबल है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAMP_EXT
इकाई एक लैंप है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_PLANT_EXT
इकाई एक पौधा है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT
इकाई एक डिसप्ले स्क्रीन है, जैसे कि मॉनिटर या टीवी.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT
इकाई एक वॉल आर्ट है.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CABINET_EXT
इकाई एक कैबिनेट है.
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर
XrSpatialComponentObjectSemanticLabelListEXT स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSpatialComponentObjectSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialComponentObjectSemanticLabelListEXT;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.semanticLabelCountएकuint32_tहै, जोsemanticLabelsकलेक्शन में मौजूद एलिमेंट की संख्या बताता है.semanticLabels, XrSpatialObjectSemanticLabelEXT का एक कलेक्शन है.
XrSpatialSnapshotEXT में मौजूद, स्पेसियल इकाइयों के ऑब्जेक्ट सिमैंटिक लेबल कॉम्पोनेंट के बारे में क्वेरी करने के लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT शामिल करें. साथ ही, XrSpatialComponentDataQueryResultEXT :: next चेन में XrSpatialComponentObjectSemanticLabelListEXT जोड़ें.
अगर XrSpatialComponentObjectSemanticLabelListEXT, XrSpatialComponentDataQueryResultEXT :: next चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.
अगर semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialComponentObjectSemanticLabelListEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_object_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXTहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
semanticLabelsmust be a pointer to an array ofsemanticLabelCountXrSpatialObjectSemanticLabelEXT values -
semanticLabelCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन
अगर किसी क्षमता के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT को शामिल किया गया है, तो कोई ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में शामिल करना होगा. यह सूची, इस कॉम्पोनेंट के साथ काम करने वाली क्षमता के XrSpatialCapabilityConfigurationBaseHeaderEXT से बनाए गए स्ट्रक्चर की होती है.
इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT :: next चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती. हालांकि, यह ऐप्लिकेशन के लिए एक वैकल्पिक कॉन्फ़िगरेशन उपलब्ध कराता है.
XrSpatialFeatureObjectSemanticLabelSubsetEXT स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSpatialFeatureObjectSemanticLabelSubsetEXT {
XrStructureType type;
const void* next;
uint32_t semanticLabelCount;
const XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureObjectSemanticLabelSubsetEXT;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.semanticLabelCountएकuint32_tहै, जोsemanticLabelsकलेक्शन में मौजूद एलिमेंट की संख्या बताता है.semanticLabels, XrSpatialObjectSemanticLabelEXT का एक कलेक्शन है.
अगर रनटाइम, किसी क्षमता के लिए xrEnumerateSpatialCapabilityComponentTypesEXT से XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT की गिनती करता है, तो उसे उसी क्षमता के लिए xrEnumerateSpatialCapabilityFeaturesEXT से XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT की गिनती भी करनी होगी. अगर कोई ऐप्लिकेशन उस सुविधा को कॉन्फ़िगर करते समय XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT को चालू करता है, तो वह उस सुविधा के कॉन्फ़िगरेशन स्ट्रक्चर में XrSpatialFeatureObjectSemanticLabelSubsetEXT को चेन कर सकता है. इससे रनटाइम को XrSpatialObjectSemanticLabelEXT में तय किए गए लेबल का सबसेट मिलता है. रनटाइम, अपनी ट्रैकिंग पाइपलाइन को ऑप्टिमाइज़ करने के लिए, लेबल के इस सबसेट का इस्तेमाल कर सकता है.
अगर semanticLabels में कोई ऐसा लेबल शामिल है जो XrSpatialObjectSemanticLabelEXT में तय नहीं किया गया है या अगर semanticLabels में XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT शामिल है, तो रनटाइम को xrCreateSpatialContextAsyncEXT से XR_ERROR_VALIDATION_FAILURE ज़रूर दिखाना चाहिए.
अगर ऐप्लिकेशन, semanticLabels में लेबल की मान्य सूची उपलब्ध कराता है, लेकिन XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT को XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents के कॉन्फ़िगरेशन स्ट्रक्चर के कलेक्शन में शामिल नहीं किया गया है, तो रनटाइम को xrCreateSpatialContextAsyncEXT से XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT को ज़रूर रिटर्न करना चाहिए. इस कॉन्फ़िगरेशन स्ट्रक्चर से XrSpatialFeatureObjectSemanticLabelSubsetEXT जुड़ा होता है.
अगर ऐप्लिकेशन किसी मान्य XrSpatialFeatureObjectSemanticLabelSubsetEXT के साथ किसी सुविधा को कॉन्फ़िगर करता है, तो रनटाइम में ऐसी इकाइयां शामिल नहीं होनी चाहिए जिनमें सिमैंटिक लेबल हों. ये लेबल, कॉन्फ़िगर किए गए स्पेशल कॉन्टेक्स्ट के लिए बनाए गए किसी भी डिस्कवरी स्नैपशॉट में, semanticLabels में शामिल नहीं होने चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialFeatureObjectSemanticLabelSubsetEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_object_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXTहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
semanticLabelsकोsemanticLabelCountमान्य XrSpatialObjectSemanticLabelEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
semanticLabelCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कीबोर्ड का सिमैंटिक लेबल
कॉम्पोनेंट का डेटा
typedef enum XrSpatialKeyboardSemanticLabelEXT {
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT = 2,
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialKeyboardSemanticLabelEXT;
XrSpatialKeyboardSemanticLabelEXT एन्यूमरेशन, कीबोर्ड के लिए सिमैंटिक लेबल के बारे में बताता है.
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT की सीमाएं और ओरिएंटेशन, उसी इकाई पर बाउंडेड 3D कॉम्पोनेंट से दिखाया जाता है. इसे यहां दी गई इमेज में दिखाया गया है. इसमें xyz = rgb है, जो ऑब्जेक्ट के बीच से शुरू होता है.
इमेज 30. कीबोर्ड ओरिएंटेशन.
Enum की जानकारी
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_UNCATEGORIZED_EXT
रनटाइम इस इकाई को कैटगरी में नहीं बांट सका.
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT
यह इकाई एक कीबोर्ड है.
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट लिस्ट स्ट्रक्चर
XrSpatialComponentKeyboardSemanticLabelListEXT स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSpatialComponentKeyboardSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialKeyboardSemanticLabelEXT* semanticLabels;
} XrSpatialComponentKeyboardSemanticLabelListEXT;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.semanticLabelCountएकuint32_tहै, जोsemanticLabelsकलेक्शन में मौजूद एलिमेंट की संख्या बताता है.semanticLabels, XrSpatialKeyboardSemanticLabelEXT का एक कलेक्शन है.
XrSpatialSnapshotEXT में मौजूद स्पेसियल इकाइयों के कीबोर्ड सिमैंटिक लेबल कॉम्पोनेंट के बारे में क्वेरी करने के लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT को शामिल करें. साथ ही, XrSpatialComponentDataQueryResultEXT :: next चेन में XrSpatialComponentKeyboardSemanticLabelListEXT को जोड़ें.
अगर XrSpatialComponentKeyboardSemanticLabelListEXT, XrSpatialComponentDataQueryResultEXT :: next चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.
अगर semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialComponentKeyboardSemanticLabelListEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_object_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXTहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
semanticLabelsकोsemanticLabelCountXrSpatialKeyboardSemanticLabelEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
semanticLabelCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन
अगर किसी क्षमता के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT को शामिल किया गया है, तो कोई ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में शामिल करना होगा. यह सूची, इस कॉम्पोनेंट के साथ काम करने वाली क्षमता के XrSpatialCapabilityConfigurationBaseHeaderEXT से बनाए गए स्ट्रक्चर की होती है.
इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT :: next चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.
माउस के लिए सिमैंटिक लेबल
कॉम्पोनेंट का डेटा
typedef enum XrSpatialMouseSemanticLabelEXT {
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MOUSE_EXT = 2,
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMouseSemanticLabelEXT;
XrSpatialMouseSemanticLabelEXT एन्यूमरेशन, माउस के लिए सिमैंटिक लेबल के बारे में बताता है.
Enum की जानकारी
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
रनटाइम इस इकाई को कैटगरी में नहीं बांट सका.
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MOUSE_EXT
इकाई एक माउस है.
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट लिस्ट स्ट्रक्चर
XrSpatialComponentMouseSemanticLabelListEXT स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrSpatialComponentMouseSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialMouseSemanticLabelEXT* semanticLabels;
} XrSpatialComponentMouseSemanticLabelListEXT;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.semanticLabelCountएकuint32_tहै, जोsemanticLabelsकलेक्शन में मौजूद एलिमेंट की संख्या बताता है.semanticLabels, XrSpatialMouseSemanticLabelEXT का कलेक्शन है.
XrSpatialSnapshotEXT में मौजूद स्पेशल इकाइयों के माउस सिमैंटिक लेबल कॉम्पोनेंट के बारे में क्वेरी करने के लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT को शामिल करें. साथ ही, XrSpatialComponentDataQueryResultEXT :: next चेन में XrSpatialComponentMouseSemanticLabelListEXT को जोड़ें.
अगर XrSpatialComponentMouseSemanticLabelListEXT, XrSpatialComponentDataQueryResultEXT :: next चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE को ज़रूर रिटर्न करना चाहिए.
अगर semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialComponentMouseSemanticLabelListEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_object_trackingएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXTहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
semanticLabelsकोsemanticLabelCountXrSpatialMouseSemanticLabelEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
semanticLabelCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन
अगर किसी क्षमता के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT को शामिल किया गया है, तो कोई ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में शामिल करना होगा. यह सूची, इस कॉम्पोनेंट के साथ काम करने वाली क्षमता के XrSpatialCapabilityConfigurationBaseHeaderEXT से बनाए गए स्ट्रक्चर की होती है.
इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT :: next चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.
कोड का उदाहरण
ऑब्जेक्ट ट्रैकिंग की सुविधा को कॉन्फ़िगर करना
यहां दिए गए उदाहरण कोड में, स्पेशल कॉन्टेक्स्ट बनाते समय ऑब्जेक्ट ट्रैकिंग की सुविधा को कॉन्फ़िगर करने का तरीका बताया गया है.
// Check if object 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_OBJECT_TRACKING_EXT) == capabilities.end()) {
return;
}
// Enumerate supported components for object tracking capability
XrSpatialCapabilityComponentTypesEXT objectComponents{XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, &objectComponents));
std::vector<XrSpatialComponentTypeEXT> objectCapabilityComponents(objectComponents.componentTypeCountOutput);
objectComponents.componentTypeCapacityInput = objectCapabilityComponents.size();
objectComponents.componentTypes = objectCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, &objectComponents));
// Check if the object & keyboard semantic labels component is supported
const auto supportsComponent = [&objectCapabilityComponents](XrSpatialComponentTypeEXT component) {
return std::find(objectCapabilityComponents.begin(), objectCapabilityComponents.end(), component) != objectCapabilityComponents.end();
};
const bool supportsObjectSemanticLabel = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT);
const bool supportsKeyboardSemanticLabel = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT);
// Enumerate supported features for object tracking capability
uint32_t featureCount;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> features(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, featureCount, &featureCount, features.data()));
const bool supportsObjectSemanticLabelSubsetFeature = std::find(features.begin(), features.end(), XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT) != features.end();
// Create a spatial context
XrSpatialContextEXT spatialContext{};
// Enable the guaranteed components of the object tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT,
};
// Optionally enable the supported semantic labels
if (supportsObjectSemanticLabel) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT);
}
if (supportsKeyboardSemanticLabel) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT);
}
// We only want to track sofa and table.
std::vector<XrSpatialObjectSemanticLabelEXT> objectSemanticLabelSubset = {
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT
};
XrSpatialFeatureObjectSemanticLabelSubsetEXT subsetFeature{XR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT};
subsetFeature.semanticLabelCount = objectSemanticLabelSubset.size();
subsetFeature.semanticLabels = objectSemanticLabelSubset.data();
XrSpatialCapabilityConfigurationObjectTrackingEXT objectTrackingConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXT};
objectTrackingConfig.capability = XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT;
objectTrackingConfig.enabledComponentCount = enabledComponents.size();
objectTrackingConfig.enabledComponents = enabledComponents.data();
if (supportsObjectSemanticLabelSubsetFeature) {
objectTrackingConfig.next = &subsetFeature;
}
std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&objectTrackingConfig),
};
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_OBJECT_TRACKING_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_3D_EXT,
};
if (supportsKeyboardSemanticLabel) {
snapshotComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_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 semantic label 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<XrBoxf> bounded3D(queryResult.entityIdCountOutput);
XrSpatialComponentBounded3DListEXT bounded3DList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT};
bounded3DList.boundCount = bounded3D.size();
bounded3DList.bounds = bounded3D.data();
queryResult.next = &bounded3DList;
std::vector<XrSpatialKeyboardSemanticLabelEXT> semanticLabels;
XrSpatialComponentKeyboardSemanticLabelListEXT semanticLabelsList{XR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXT};
if (supportsKeyboardSemanticLabel) {
semanticLabels.resize(queryResult.entityIdCountOutput);
semanticLabelsList.semanticLabelCount = semanticLabels.size();
semanticLabelsList.semanticLabels = semanticLabels.data();
semanticLabelsList.next = queryResult.next;
queryResult.next = &semanticLabelsList;
}
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;
}
// 3D bounds for entity entityIds[i] is bounded3D[i].extents centered on bounded3D[i].center.
if (supportsKeyboardSemanticLabel) {
// semantic label for entity entityIds[i] is semanticLabels[i].
}
}
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
// ...
}
नए स्ट्रक्चर
- XrSpatialCapabilityConfigurationObjectTrackingEXT
XrSpatialCapabilityConfigurationObjectTrackingEXT को एक्सटेंड करना :
XrSpatialComponentDataQueryResultEXT को एक्सटेंड करना :
नए Enum
नए Enum कॉन्सटेंट
XR_EXT_SPATIAL_OBJECT_TRACKING_EXTENSION_NAMEXR_EXT_spatial_object_tracking_SPEC_VERSIONXrSpatialCapabilityEXT को एक्सटेंड करना :
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
XrSpatialCapabilityFeatureEXT को एक्सटेंड करना :
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
XrSpatialComponentTypeEXT को एक्सटेंड करना :
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
XrStructureType को एक्सटेंड करना :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
समस्याएं
वर्शन हिस्ट्री
रिविज़न 1, 03-06-2025 (निहाव जैन, Google)
- एक्सटेंशन का शुरुआती ब्यौरा