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 दिखाना ज़रूरी है.

सही इस्तेमाल (इंप्लिसिट)

गारंटी वाले कॉम्पोनेंट

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 को ज़रूर दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

कॉन्फ़िगरेशन

अगर किसी क्षमता के लिए, 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 होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • 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 है, जो ऑब्जेक्ट के बीच से शुरू होता है.

ext spatial object tracking keyboard orientation

इमेज 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 को ज़रूर दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

कॉन्फ़िगरेशन

अगर किसी क्षमता के लिए, 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 होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • semanticLabels को semanticLabelCount XrSpatialMouseSemanticLabelEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए
  • 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
  // ...
}

नए स्ट्रक्चर

नए Enum

नए Enum कॉन्सटेंट

  • XR_EXT_SPATIAL_OBJECT_TRACKING_EXTENSION_NAME
  • XR_EXT_spatial_object_tracking_SPEC_VERSION
  • XrSpatialCapabilityEXT को एक्सटेंड करना :

    • XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
  • XrSpatialCapabilityFeatureEXT को एक्सटेंड करना :

    • XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
  • XrSpatialComponentTypeEXT को एक्सटेंड करना :

    • XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
    • XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
    • XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
  • XrStructureType को एक्सटेंड करना :

    • XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXT
    • XR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXT
    • XR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT

समस्याएं

वर्शन हिस्ट्री

  • रिविज़न 1, 03-06-2025 (निहाव जैन, Google)

    • एक्सटेंशन का शुरुआती ब्यौरा