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 .
אפליקציות יכולות להפעיל את היכולת המרחבית 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 -
typeחייב להיותXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXT -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים . מידע נוסף: XrSpatialFeatureObjectSemanticLabelSubsetEXT -
capabilityחייב להיות ערך XrSpatialCapabilityEXT תקין -
enabledComponentsחייב להיות מצביע למערך של ערכי XrSpatialComponentTypeEXT תקינים מסוגenabledComponentCount - הפרמטר
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ליכולת מעקב אחר אובייקטים, אבל הן חייבות לתמוך לפחות בסוג רכיב אחד שמספק תווית סמנטית.
רכיב תלת-ממדי מוגבל
הרכיב התלת-ממדי התחום מספק את המרכז וההיקף של האובייקט שמיוצג על ידי הישות שעליה הוא נמצא. פרטים נוספים זמינים במאמר תלת-ממד מוגבל.
רכיבים אופציונליים
סביבת זמן ריצה שתומכת ב-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 בישות תואם למאפיינים הפיזיים של האובייקט הזה.
אלה המשמעויות של ערכי הספירה:
תיאור הטיפוס בן המנייה (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 , צריך לכלול את 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 -
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;
תיאורי חברים
-
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 -
typeחייב להיותXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
semanticLabelsחייב להיות מצביע למערך של ערכי XrSpatialObjectSemanticLabelEXT תקינים שלsemanticLabelCount - הפרמטר
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. כיוון המקלדת.
תיאור הטיפוס בן המנייה (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 , צריך לכלול את 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 -
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 מתארת תווית סמנטית לעכבר.
תיאור הטיפוס בן המנייה (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 , צריך לכלול את 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 -
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 חדשים
קבועי Enum חדשים
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, 3 ביוני 2025 (Nihav Jain, Google)
- תיאור התוסף הראשוני