XR_EXT_spatial_object_tracking

নামের স্ট্রিং

XR_EXT_spatial_object_tracking

এক্সটেনশনের ধরন

ইনস্ট্যান্স এক্সটেনশন

রেজিস্টার করা এক্সটেনশন নম্বর

745

সংশোধন

1

অনুমোদনের স্ট্যাটাস

অনুমোদিত নয়

এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি

XR_EXT_spatial_entity

IP স্ট্যাটাস

IP সংক্রান্ত কোনও দাবি নেই।

কন্ট্রিবিউটর

নিহভ জৈন, 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-এর অ্যারের একটি পয়েন্টার।

অ্যাপ্লিকেশন XrSpatialContextCreateInfoEXT :: capabilityConfigs -এ XrSpatialCapabilityConfigurationObjectTrackingEXT স্ট্রাকচারে একটি পয়েন্টার যোগ করে XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT স্পেশিয়াল ক্ষমতা চালু করতে পারে।

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 লেবেল সহ এন্টিটির ক্ষেত্রে, বাউন্ডেড 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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

কনফিগারেশন

যদি XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে 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 চালু করলে, এটি XrSpatialObjectSemanticLabelEXT-এ সংজ্ঞায়িত লেবেলের একটি সাবসেট সহ রানটাইম প্রদান করার জন্য সেই ক্ষমতার সংশ্লিষ্ট কনফিগারেশন স্ট্রাকচারে XrSpatialFeatureObjectSemanticLabelSubsetEXT চেইন করতে পারে। রানটাইম হয়ত লেবেলের এই সাবসেট ব্যবহার করে তার ট্র্যাকিং পাইপলাইন অপ্টিমাইজ করতে পারে।

semanticLabels-এ XrSpatialObjectSemanticLabelEXT-এ সংজ্ঞায়িত নয় এমন কোনও লেবেল থাকলে বা semanticLabels-এ XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT থাকলে রানটাইমকে xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।

রানটাইমকে xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT রিটার্ন করতেই হবে, যদি অ্যাপ্লিকেশন semanticLabels-এ লেবেলের সঠিক তালিকা প্রদান করে কিন্তু XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT, XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents কনফিগারেশন স্ট্রাকচারের অ্যারেতে অন্তর্ভুক্ত না থাকে, যার সাথে XrSpatialFeatureObjectSemanticLabelSubsetEXT চেইন করা আছে।

অ্যাপ্লিকেশনটি যদি সঠিক XrSpatialFeatureObjectSemanticLabelSubsetEXT সহ কোনও ক্যাপাবিলিটি কনফিগার করে, তাহলে রানটাইমে অবশ্যই এমন এন্টিটি অন্তর্ভুক্ত করা যাবে না যেগুলির সিম্যান্টিক লেবেল কনফিগার করা স্পেশিয়াল কন্টেক্সটের জন্য তৈরি করা কোনও ডিসকভারি স্ন্যাপশটে semanticLabels-এ তালিকাভুক্ত নেই।

সঠিক ব্যবহার (অন্তর্নিহিত)

কীবোর্ড সিম্যান্টিক লেবেল

কম্পোনেন্ট ডেটা

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 এনিউমারেশন কীবোর্ডের জন্য একটি সিম্যান্টিক লেবেল বর্ণনা করে।

একই এন্টিটিতে বাউন্ডেড 3D কম্পোনেন্ট দ্বারা উপস্থাপিত XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT-এর ব্যাপ্তি এবং ওরিয়েন্টেশন নিম্নলিখিত ছবিতে দেখানো হয়েছে (xyz = rgb সহ) যা অবজেক্টের কেন্দ্র থেকে শুরু হয়।

ext spatial object tracking keyboard orientation

ছবি ৩০. কীবোর্ড ওরিয়েন্টেশন।

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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

কনফিগারেশন

যদি XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে 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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

কনফিগারেশন

যদি XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে 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

ইস্যু

ভার্সনের ইতিহাস

  • রিভিশন ১, ০৩-০৬-২০২৫ (নিহভ জৈন, Google)

    • প্রাথমিক এক্সটেনশনের বিবরণ