XR_EXT_spatial_object_tracking
رشته نام
XR_EXT_spatial_object_tracking
نوع افزونه
افزونه نمونه
شماره داخلی ثبتشده
745
بازبینی
1
وضعیت تصویب
تصویبنشده
وابستگیهای افزونه و نسخه
XR_EXT_spatial_entity
وضعیت IP
هیچ ادعای مالکیت فکری شناختهشدهای وجود ندارد.
همیاران
Nihav Jain، Google
Natalie Fleury، Meta
Yuichi Taguchi، Meta
Ron Bessems، Meta
Yin Li، Microsoft
Jimmy Alamparambil، ByteDance
Zhipeng Liu، ByteDance
Jun Yan، ByteDance
Andy Biar، Unity Technologies
Rebecca Nordhauser، 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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. -
capabilityیک XrSpatialCapabilityEXT است و بایدXR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXTباشد. enabledComponentCountیکuint32_tاست که تعداد عناصر را در آرایهenabledComponentsتوصیف میکند.-
enabledComponentsاشارهگری به آرایهای از XrSpatialComponentTypeEXT است.
برنامهها میتوانند با افزودن اشارهگر به ساختار XrSpatialCapabilityConfigurationObjectTrackingEXT در XrSpatialContextCreateInfoEXT :: capabilityConfigs ، قابلیت فضایی XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT را فعال کنند.
اگر capability XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT نباشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE را برگرداند.
استفاده معتبر (ضمنی)
- افزونه
XR_EXT_spatial_object_trackingباید قبلاز استفاده از XrSpatialCapabilityConfigurationObjectTrackingEXT فعال شود -
typeبایدXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXTباشد -
nextبایدNULLیا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد. همچنین ببینید: XrSpatialFeatureObjectSemanticLabelSubsetEXT -
capabilityباید مقدار XrSpatialCapabilityEXT معتبری باشد -
enabledComponentsباید اشارهگری به آرایهای از مقادیر معتبرenabledComponentCountXrSpatialComponentTypeEXT باشد - پارامتر
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برای قابلیت ردیابی شیء پشتیبانی نکنند، اما باید حداقل از یک نوع مؤلفه که برچسب معنایی ارائه میدهد پشتیبانی کنند.
مؤلفه سهبعدی محدودشده
مؤلفه سهبعدی محدودشده مرکز و حدود شیء را که توسط نهادی که روی آن قرار دارد نشان داده میشود ارائه میدهد. برای جزئیات بیشتر، Bounded 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، محور +Z مؤلفه محدود سهبعدی باید تقریباً با سطح نرمال صفحهنمایش مطابقت داشته باشد.
برای نهادهای دارای برچسب XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT، محور Z+ مؤلفه سهبعدی محدود باید با سطح نرمال دیواری که اثر هنری روی آن پیدا شده است مطابقت داشته باشد.
برای نهادهای دارای برچسب XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT، محور Z+ مؤلفه محدود سهبعدی باید با سطح نرمال جدول مطابقت داشته باشد.
برای همه برچسبهای دیگر در 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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. semanticLabelCountیکuint32_tاست که تعداد عناصر را در آرایهsemanticLabelsتوصیف میکند.semanticLabelsآرایهای از XrSpatialObjectSemanticLabelEXT است.
برای پرسمان کردن عنصر برچسب معنایی شیء از موجودیتهای فضایی در XrSpatialSnapshotEXT ، XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT را در XrSpatialComponentDataQueryConditionEXT :: componentTypes اضافه کنید و XrSpatialComponentObjectSemanticLabelListEXT را به زنجیره XrSpatialComponentDataQueryResultEXT :: next اضافه کنید.
اگر XrSpatialComponentObjectSemanticLabelListEXT در زنجیره XrSpatialComponentDataQueryResultEXT :: next باشد اما XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT در XrSpatialComponentDataQueryConditionEXT :: componentTypes گنجانده نشده باشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE را از xrQuerySpatialComponentDataEXT برگرداند.
اگر semanticLabelCount کمتر از XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput باشد، زمان اجرا باید XR_ERROR_SIZE_INSUFFICIENT را از xrQuerySpatialComponentDataEXT برگرداند.
استفاده معتبر (ضمنی)
- افزونه
XR_EXT_spatial_object_trackingباید قبلاز استفاده از XrSpatialComponentObjectSemanticLabelListEXT فعال شود -
typeبایدXR_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;
توضیحات عضو
typeXrStructureType این ساختار است.-
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 را برای زمان اجرا فراهم کند. زمان اجرا ممکن است از این زیرمجموعه برچسبها برای بهینهسازی خطوط لوله ردیابی خود استفاده کند.
اگر semanticLabels حاوی برچسبی باشد که در XrSpatialObjectSemanticLabelEXT تعریف نشده است یا اگر semanticLabels حاوی XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT باشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE را از xrCreateSpatialContextAsyncEXT برگرداند.
اگر برنامه فهرست معتبری از برچسبها را در semanticLabels ارائه دهد اما XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT در آرایه enabledComponents از ساختار پیکربندی که XrSpatialFeatureObjectSemanticLabelSubsetEXT به آن زنجیر شده است در XrSpatialCapabilityConfigurationBaseHeaderEXT گنجانده نشده باشد، زمان اجرا باید XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT را از xrCreateSpatialContextAsyncEXT برگرداند.
اگر برنامه قابلیتی را با XrSpatialFeatureObjectSemanticLabelSubsetEXT معتبر پیکربندی کند، زمان اجرا نباید شامل نهادهایی باشد که برچسبهای معنایی دارند که در semanticLabels در هیچ عکس آنی اکتشافی ایجادشده برای بافت فضایی پیکربندیشده فهرست نشدهاند.
استفاده معتبر (ضمنی)
- افزونه
XR_EXT_spatial_object_trackingباید قبلاز استفاده از XrSpatialFeatureObjectSemanticLabelSubsetEXT فعال شود -
typeبایدXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXTباشد -
nextبایدNULLیا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد -
semanticLabelsباید اشارهگری به آرایهای از مقادیر معتبرsemanticLabelCountXrSpatialObjectSemanticLabelEXT باشد - پارامتر
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 که با مؤلفه سهبعدی محدود در همان نهاد نشان داده شده است در تصویر زیر (با xyz = rgb) که از مرکز شیء شروع میشود نشان داده شده است.
شکل ۳۰. جهت صفحهکلید.
شرح شمارشی
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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. semanticLabelCountیکuint32_tاست که تعداد عناصر را در آرایهsemanticLabelsتوصیف میکند.-
semanticLabelsآرایهای از XrSpatialKeyboardSemanticLabelEXT است.
برای پرسمان کردن مؤلفه برچسب معنایی صفحهکلید موجودیتهای فضایی در XrSpatialSnapshotEXT، XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT را در XrSpatialComponentDataQueryConditionEXT :: componentTypes اضافه کنید و XrSpatialComponentKeyboardSemanticLabelListEXT را به زنجیره XrSpatialComponentDataQueryResultEXT :: next اضافه کنید.
اگر XrSpatialComponentKeyboardSemanticLabelListEXT در زنجیره XrSpatialComponentDataQueryResultEXT :: next باشد اما XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT در XrSpatialComponentDataQueryConditionEXT :: componentTypes گنجانده نشده باشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE را از xrQuerySpatialComponentDataEXT برگرداند.
اگر semanticLabelCount کمتر از XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput باشد، زمان اجرا باید XR_ERROR_SIZE_INSUFFICIENT را از xrQuerySpatialComponentDataEXT برگرداند.
استفاده معتبر (ضمنی)
- افزونه
XR_EXT_spatial_object_trackingباید پیشاز استفاده از XrSpatialComponentKeyboardSemanticLabelListEXT فعال شود -
typeبایدXR_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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. semanticLabelCountیکuint32_tاست که تعداد عناصر را در آرایهsemanticLabelsتوصیف میکند.-
semanticLabelsآرایهای از XrSpatialMouseSemanticLabelEXT است.
برای پرسمان کردن مؤلفه برچسب معنایی موش از موجودیتهای فضایی در XrSpatialSnapshotEXT ، XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT را در XrSpatialComponentDataQueryConditionEXT :: componentTypes اضافه کنید و XrSpatialComponentMouseSemanticLabelListEXT را به زنجیره XrSpatialComponentDataQueryResultEXT :: next اضافه کنید.
اگر XrSpatialComponentMouseSemanticLabelListEXT در زنجیره XrSpatialComponentDataQueryResultEXT :: next باشد اما XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT در XrSpatialComponentDataQueryConditionEXT :: componentTypes گنجانده نشده باشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE را از xrQuerySpatialComponentDataEXT برگرداند.
اگر semanticLabelCount کمتر از XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput باشد، زمان اجرا باید XR_ERROR_SIZE_INSUFFICIENT را از xrQuerySpatialComponentDataEXT برگرداند.
استفاده معتبر (ضمنی)
- افزونه
XR_EXT_spatial_object_trackingباید پیشاز استفاده از XrSpatialComponentMouseSemanticLabelListEXT فعال شود -
typeبایدXR_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
// ...
}
سازههای جدید
- XrSpatialCapabilityConfigurationObjectTrackingEXT
درحال گسترش دادن XrSpatialCapabilityConfigurationObjectTrackingEXT :
درحال گسترش دادن XrSpatialComponentDataQueryResultEXT :
Enums جدید
ثابتهای شمارشی جدید
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
مشکلات
سابقه نسخه
بازبینی ۱، ۲۰۲۵-۰۶-۰۳ (نیهاو جین، Google)
- شرح اولیه افزونه