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;

توضیحات عضو

  • type XrStructureType این ساختار است.
  • ‫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_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;

توضیحات عضو

  • 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 اضافه کنید.

اگر 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_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 را برای زمان اجرا فراهم کند. زمان اجرا ممکن است از این زیرمجموعه برچسب‌ها برای بهینه‌سازی خطوط لوله ردیابی خود استفاده کند.

اگر 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 در هیچ عکس آنی اکتشافی ایجادشده برای بافت فضایی پیکربندی‌شده فهرست نشده‌اند.

استفاده معتبر (ضمنی)

برچسب معنایی صفحه‌کلید

داده‌های مؤلفه

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) که از مرکز شیء شروع می‌شود نشان داده شده است.

ext spatial object tracking keyboard orientation

شکل ۳۰. جهت صفحه‌کلید.

شرح شمارشی

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 اضافه کنید.

اگر 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_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 اضافه کنید.

اگر 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_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
  // ...
}

سازه‌های جدید

Enums جدید

ثابت‌های شمارشی جدید

  • 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)

    • شرح اولیه افزونه