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 وتحدّد إمكانية مكانية لتتبُّع مجموعة من العناصر المحدّدة مسبقًا بدون الحاجة إلى مجموعة بيانات إدخال من التطبيق.
دعم بيئة التشغيل
إذا كان وقت التشغيل يتيح تتبُّع العناصر، يجب أن يشير إلى ذلك من خلال تعداد XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT في xrEnumerateSpatialCapabilitiesEXT .
الإعداد
يتم تحديد بنية 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" المكانية من خلال إضافة مؤشر إلى بنية XrSpatialCapabilityConfigurationObjectTrackingEXT في XrSpatialContextCreateInfoEXT :: capabilityConfigs .
يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE إذا لم يكن capability هو XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT .
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_EXT_spatial_object_trackingقبل استخدام XrSpatialCapabilityConfigurationObjectTrackingEXT - يجب أن يكون
typeXR_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- نوع مكوّن واحد على الأقل يوفّر مجموعة من التصنيفات الدلالية للعناصر التي يتم تتبّعها لا معنى لإمكانية تتبُّع العناصر بدون مكوّن تصنيف دلالي. While this extension defines
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTandXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTas possible semantic label components for runtimes to support, other extensions may define new component types to provide different classes of semantic labels that describe a tracked object. يُرجى الاطّلاع على [ext_spatial_semantic_labels_guidelines] للحصول على تفاصيل حول مجموعات التصنيفات الدلالية وتصميم أنواع المكوّنات. قد لا تتيح بيئات التشغيل استخدامXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTأوXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTلإمكانية تتبُّع العناصر، ولكن يجب أن تتيح استخدام نوع مكوّن واحد على الأقل يوفّر تصنيفًا دلاليًا.
مكوّن ثلاثي الأبعاد محدود
يوفّر المكوّن الثلاثي الأبعاد المحدود مركز العنصر الذي يمثّله الكيان الذي يتضمّنه ونطاقه. لمزيد من التفاصيل، يُرجى الاطّلاع على الصور الثلاثية الأبعاد المحدودة.
المكوِّنات الاختيارية
قد يتيح وقت التشغيل الذي يتوافق مع 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، يجب أن يتطابق المحور +Z لمكوّن Bounded 3D تقريبًا مع السطح العمودي للشاشة.
بالنسبة إلى الكيانات التي تحمل التصنيف XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT، يجب أن يتطابق المحور +Z لمكوّن Bounded 3D مع العمودي على سطح الجدار الذي تم اكتشاف العمل الفني عليه.
بالنسبة إلى الكيانات التي تحمل التصنيف XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT، يجب أن يتطابق المحور +Z لمكوّن Bounded 3D مع العمودي على سطح الطاولة.
بالنسبة إلى جميع التصنيفات الأخرى في XrSpatialObjectSemanticLabelEXT، يجب ألّا يضع التطبيق أي افتراضات حول كيفية توافق XrBoxf :: center :: orientation الذي يوفّره مكوّن Bounded 3D في الكيان مع السمات المادية لذلك العنصر.
في ما يلي معاني قيم تعداد الخيارات:
وصف التعداد
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، يجب تضمين XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes وإضافة XrSpatialComponentObjectSemanticLabelListEXT إلى سلسلة XrSpatialComponentDataQueryResultEXT :: next.
يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE من xrQuerySpatialComponentDataEXT إذا كان XrSpatialComponentObjectSemanticLabelListEXT في السلسلة XrSpatialComponentDataQueryResultEXT :: next ولكن لم يتم تضمين XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes .
يجب أن يعرض وقت التشغيل XR_ERROR_SIZE_INSUFFICIENT من xrQuerySpatialComponentDataEXT إذا كان semanticLabelCount أقل من XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_EXT_spatial_object_trackingقبل استخدام XrSpatialComponentObjectSemanticLabelListEXT - يجب أن يكون
typeXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXT -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
semanticLabelsمؤشرًا إلى مصفوفة من قيمsemanticLabelCountXrSpatialObjectSemanticLabelEXT - يجب أن تكون المَعلمة
semanticLabelCountأكبر من0
الإعداد
إذا تم تعداد 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 .
إذا كان وقت التشغيل يعدد XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT من xrEnumerateSpatialCapabilityComponentTypesEXT لإمكانية معيّنة، يجب أيضًا تعداد XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT من xrEnumerateSpatialCapabilityFeaturesEXT للإمكانية نفسها. إذا فعّل أحد التطبيقات XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT عند ضبط هذه الإمكانية، يمكنه ربط XrSpatialFeatureObjectSemanticLabelSubsetEXT ببنية الضبط المقابلة لهذه الإمكانية لتزويد وقت التشغيل بمجموعة فرعية من التصنيفات المحدّدة في XrSpatialObjectSemanticLabelEXT . قد تستخدم بيئة التشغيل هذه المجموعة الفرعية من التصنيفات لتحسين مسارات التتبُّع.
يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE من xrCreateSpatialContextAsyncEXT إذا كان semanticLabels يحتوي على أي تصنيف غير محدّد في XrSpatialObjectSemanticLabelEXT أو إذا كان semanticLabels يحتوي على XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT .
يجب أن يعرض وقت التشغيل XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT من xrCreateSpatialContextAsyncEXT إذا قدّم التطبيق قائمة صالحة بالتصنيفات في semanticLabels، ولكن لم يتم تضمين XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT في مصفوفة enabledComponents من XrSpatialCapabilityConfigurationBaseHeaderEXT :: لبنية الضبط التي تم ربط XrSpatialFeatureObjectSemanticLabelSubsetEXT بها.
إذا ضبط التطبيق إمكانية باستخدام XrSpatialFeatureObjectSemanticLabelSubsetEXT صالح، يجب ألّا يتضمّن وقت التشغيل كيانات تحتوي على تصنيفات دلالية غير مُدرَجة في semanticLabels في أي لقطة اكتشاف تم إنشاؤها للسياق المكاني الذي تم ضبطه.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_EXT_spatial_object_trackingقبل استخدام XrSpatialFeatureObjectSemanticLabelSubsetEXT - يجب أن يكون
typeXR_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 الممثَّل بمكوّن Bounded 3D في الكيان نفسه في الصورة التالية (مع xyz = rgb) التي تنشأ في مركز العنصر.
الشكل 30: اتجاه لوحة المفاتيح
وصف التعداد
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، يجب تضمين XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes وإضافة XrSpatialComponentKeyboardSemanticLabelListEXT إلى سلسلة XrSpatialComponentDataQueryResultEXT :: next.
يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE من xrQuerySpatialComponentDataEXT إذا كان XrSpatialComponentKeyboardSemanticLabelListEXT في السلسلة XrSpatialComponentDataQueryResultEXT :: next ولكن لم يتم تضمين XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes .
يجب أن يعرض وقت التشغيل XR_ERROR_SIZE_INSUFFICIENT من xrQuerySpatialComponentDataEXT إذا كان semanticLabelCount أقل من XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_EXT_spatial_object_trackingقبل استخدام XrSpatialComponentKeyboardSemanticLabelListEXT - يجب أن يكون
typeXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXT -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
semanticLabelsمؤشرًا إلى مصفوفة من قيمsemanticLabelCountXrSpatialKeyboardSemanticLabelEXT - يجب أن تكون المَعلمة
semanticLabelCountأكبر من0
الإعداد
إذا تم تعداد 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 تصنيفًا دلاليًا للماوس.
وصف التعداد
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، أدرِج XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes وأضِف XrSpatialComponentMouseSemanticLabelListEXT إلى سلسلة XrSpatialComponentDataQueryResultEXT :: next.
يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE من xrQuerySpatialComponentDataEXT إذا كان XrSpatialComponentMouseSemanticLabelListEXT في السلسلة XrSpatialComponentDataQueryResultEXT :: next ولكن لم يتم تضمين XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT في XrSpatialComponentDataQueryConditionEXT :: componentTypes .
يجب أن يعرض وقت التشغيل XR_ERROR_SIZE_INSUFFICIENT من xrQuerySpatialComponentDataEXT إذا كان semanticLabelCount أقل من XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_EXT_spatial_object_trackingقبل استخدام XrSpatialComponentMouseSemanticLabelListEXT - يجب أن يكون
typeXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXT -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية -
semanticLabelsيجب أن يكون مؤشرًا إلى مصفوفة من قيمsemanticLabelCountXrSpatialMouseSemanticLabelEXT - يجب أن تكون المَعلمة
semanticLabelCountأكبر من0
الإعداد
إذا تم تعداد 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
// ...
}
منشآت جديدة
عمليات تعداد جديدة
ثوابت تعداد جديدة
XR_EXT_SPATIAL_OBJECT_TRACKING_EXTENSION_NAMEXR_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_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)
- الوصف الأولي للإضافة