XR_EXT_spatial_mesh_tracking

מחרוזת שם

XR_EXT_spatial_mesh_tracking

סוג התוסף

תוסף למכונה

מספר השלוחה הרשום

784

גרסה

1

סטטוס האישור

לא אושר

תלויות של תוספים וגרסאות

XR_EXT_spatial_entity

שותפים ביצירת התוכן

Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance

סקירה כללית

התוסף הזה מבוסס על XR_EXT_spatial_entity ומגדיר יכולות מרחביות למעקב אחרי רשת המשולשים של הסביבה. רשת המשולשים שנוצרת באמצעות היכולת שמוגדרת בתוסף הזה מיועדת לשימוש באפליקציות כדי לקבוע התנגשויות של התוכן הווירטואלי עם הסביבה.

יכולת מעקב אחר רשת מרחבית

התוסף הזה מגדיר את XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT כיכולת מרחבית למעקב אחרי רשת המשולשים של הסביבה. היכולת הזו לא כוללת מעקב אחרי רשת של ישויות כמו מישורים ואובייקטים. במקום זאת, צריך לציין את המעקב הזה באמצעות פירוט של הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT עבור היכולות המתאימות שעוקבות אחרי הישויות האלה.

האפליקציה משתמשת ב-XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT כדי לספק רשת אטומה ורשת לא אטומה, בהתאם ליכולות של סביבת זמן הריצה ולהגדרות שנבחרו באפליקציה.

רשת אטומה היא רשת שבה מולאו רווחים ואזורים שלא נסרקו בכל הגדלים, והיא יוצרת רשת הדוקה בתוך בלוק נפחי מסוים. כמו שהשם מרמז, אם אפליקציה ממלאת מים בתוך רשת אטומה למים, לא אמורים להיות מים שדולפים מהנפח האטום למים. כדי להפוך רשת סרוקה לאטומה, בדרך כלל נדרש כוח מחשוב גבוה מאוד, אבל חלק מסביבות זמן הריצה מקזזות את העלות הזו על ידי עיבוד הרשת מראש.

תמיכה בסביבת זמן הריצה

אם סביבת זמן הריצה תומכת במעקב אחר רשת המשולשים של הסביבה, היא חייבת לציין זאת על ידי ספירת XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ב-xrEnumerateSpatialCapabilitiesEXT .

יש 3 יכולות אפשריות של סביבת זמן ריצה שתומכת ב-XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT:

  • סביבת זמן הריצה תומכת רק במעקב אחר רשתות לא אטומות. במקרה כזה, סביבת זמן הריצה מונה את XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ב-xrEnumerateSpatialCapabilitiesEXT אבל אסור לה למנות את XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ב-xrEnumerateSpatialCapabilityFeaturesEXT (ראו מעקב אחרי רשת אטומה).
  • סביבת זמן הריצה תומכת במעקב אחרי רשתות אטומות ולא אטומות. במקרה כזה, סביבת זמן הריצה מונה את XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ב-xrEnumerateSpatialCapabilitiesEXT וחייבת גם למנות את XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ב-xrEnumerateSpatialCapabilityFeaturesEXT (ראו מעקב אחרי רשת אטומה) כדי לאפשר בקשות מעקב אחרי רשת אטומה מהאפליקציה.
  • סביבת זמן הריצה תומכת רק במעקב אחר רשת אטומה. במקרה כזה, זמן הריצה מונה את XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ב-xrEnumerateSpatialCapabilitiesEXT וחייב גם למנות את XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ב-xrEnumerateSpatialCapabilityFeaturesEXT (ראו מעקב אחרי רשת אטומה) כדי לציין לאפליקציה שהיא תומכת במעקב אחרי רשת אטומה. במקרה הספציפי הזה, זמן הריצה תמיד מחזיר רשת אטומה לאפליקציה, בלי קשר להגדרות של XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT .

הגדרות אישיות

המבנה של XrSpatialCapabilityConfigurationMeshTrackingEXT מוגדר כך:

typedef struct XrSpatialCapabilityConfigurationMeshTrackingEXT {
    XrStructureType                     type;
    const void*                         next;
    XrSpatialCapabilityEXT              capability;
    uint32_t                            enabledComponentCount;
    const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationMeshTrackingEXT;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים.
  • ‫capability הוא XrSpatialCapabilityEXT וחייב להיות XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT .
  • ‫enabledComponentCount הוא uint32_t שמתאר את מספר הרכיבים במערך enabledComponents.
  • ‫enabledComponents הוא מצביע למערך של XrSpatialComponentTypeEXT .

אפליקציות יכולות להפעיל את היכולת המרחבית XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT על ידי הכללת מצביע למבנה XrSpatialCapabilityConfigurationMeshTrackingEXT ב-XrSpatialContextCreateInfoEXT :: capabilityConfigs .

זמן הריצה חייב להחזיר את הערך XR_ERROR_VALIDATION_FAILURE אם capability הוא לא XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT .

שימוש תקין (משתמע)

מעקב אחר רשת אטומה למים

המבנה של XrSpatialFeatureTrackWatertightMeshEXT מוגדר כך:

typedef struct XrSpatialFeatureTrackWatertightMeshEXT {
    XrStructureType    type;
    const void*        next;
    XrBool32           enableWatertightMeshTracking;
} XrSpatialFeatureTrackWatertightMeshEXT;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים.
  • השדה enableWatertightMeshTracking מציין אם סביבת זמן הריצה חייבת לחשב רשת אטומה לסביבה שנסרקה.

סביבות זמן ריצה שתומכות במעקב אחר רשת אטומה חייבות למנות את XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ב-xrEnumerateSpatialCapabilityFeaturesEXT . התכונה XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT מאפשרת לאפליקציות להפעיל מעקב אחר רשת אטומה, ולהסכים באופן מפורש לכל חישוב נוסף שעלול להיגרם כתוצאה מיצירת הרשת האטומה .

אם XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT נספר על ידי xrEnumerateSpatialCapabilityFeaturesEXT עבור יכולת מסוימת, האפליקציה יכולה לשרשר את XrSpatialFeatureTrackWatertightMeshEXT למבנה ההגדרה המתאים של אותה יכולת כדי לציין אם היא רוצה שהרשת הנעקבת תהיה אטומה למים או לא. אם האפליקציה מגדירה את enableWatertightMeshTracking כ-XR_TRUE , זמן הריצה חייב לחשב ולספק לאפליקציה רשת אטומה של הסביבה. אם האפליקציה מגדירה את enableWatertightMeshTracking ל-XR_FALSE , יכול להיות שהרשת המנוטרת עדיין תהיה אטומה אם זמן הריצה תומך רק במעקב אחר רשת אטומה, למשל במקרים שבהם זמן הריצה מספק רשת מעובדת מסביבה שנסרקה מראש.

שימוש תקין (משתמע)

תהליך הגשת הבקשה

הדיאגרמה הבאה מראה איך אפליקציה יכולה להגדיר את ההקשר המרחבי אם היא רוצה לעקוב אחרי רשת אטומה של הסביבה.

כן

כן

האפליקציה צריכה
רשת אטומה למים

האפליקציה צריכה...

כן

כן

לא

לא

סביבת זמן הריצה
תומכת ביכולת
"מעקב אחר רשת"

זמן ריצה...

כן

כן

לא

לא

זמן הריצה
תומך בתכונה
"מעקב אחר רשת אטומה"

זמן ריצה...

האפליקציה יוצרת הקשר מרחבי באמצעות "יכולת מעקב אחר רשת" וגם התכונה "מעקב אחר רשת אטומה"

האפליקציה יוצרת...

האפליקציה מטפלת במצב שבו אין תמיכה בתכונה בסביבת זמן הריצה הנוכחית

האפליקציה מטפלת במחסור ב...

האפליקציה מעבדת את הרשת שנוצרה כדי ליצור רשת אטומה, אולי בעזרת המשתמש שסוגר את החורים ברשת

האפליקציה מעבדת את ה... הטקסט הוא לא SVG – אי אפשר להציג אותו

איור 29. תהליך הבקשה של האפליקציה ליצירת רשת אטומה

רכיבים מובטחים

סביבת זמן ריצה שתומכת ב-XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT חייבת לספק את הרכיבים המרחביים הבאים כרכיבים מובטחים של כל הישויות שזוהו על ידי היכולת הזו, וחייבת למנות אותם ב-xrEnumerateSpatialCapabilityComponentTypesEXT :

  • XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
  • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
רכיב תלת-ממדי מוגבל

הרכיב התלת-ממדי המוגבל מספק את המרכז וההיקף של הישות שהוא נמצא בה. הנתונים שהרכיב הזה מספק מאפשרים לאפליקציות להסיר בקלות את הישויות שנמצאות מחוץ ל-view frustum (החלק הנראה של המרחב הווירטואלי).

פרטים נוספים זמינים במאמר תלת-ממד מוגבל.

רכיב רשת תלת-ממדית

רכיב הרשת התלת-ממדית מספק את הרשת התלת-ממדית של הישות שהוא נמצא בה. פרטים נוספים זמינים במאמר Mesh 3D.

פילוח נפחי (חלוקה לחלקים)

יכול להיות שסביבת זמן הריצה תחלק את הרשת הגיאומטרית לבלוקים נפחיים (נתחים) כדי להקל על האפליקציות להסיר את הבלוקים של הרשת הגיאומטרית שנמצאים מחוץ לתיבת התצוגה שלה. במקרה כזה, זמן הריצה חייב להתייחס לכל בלוק נפחי כזה כישות נפרדת, וקבוצת הרכיבים המובטחים צריכה להיות בכל ישות כזו (בלוק נפחי). אם סביבת זמן הריצה מספקת רשת אטומה למים באופן הזה, כל בלוק נפחי בנפרד לא אטום למים, אבל קבוצה של בלוקים יחד יוצרת רשת אטומה למים. בתרחיש כזה, זמן הריצה חייב להוסיף את הרכיב XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT לכל ישות (בלוק נפחי), והערך של ישות האם בכל הבלוקים שיוצרים יחד רשת אטומה חייב להיות זהה. כך האפליקציה יכולה לזהות אילו חלקים יוצרים יחד רשת אטומה.

רשתות של בלוקים נפחיים סמוכים יכולות לחלוק קודקודים, אבל המשולשים של בלוק נפחי אחד לא יכולים לחפוף למשולשים של הנפח הסמוך.

רכיבים אופציונליים

Mesh Normals

נתוני רכיבים

‫XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT משתמש ב-XrSpatialBufferEXT לנתונים שלו. ‫XrSpatialBufferEXT :: bufferId מייצג את המאגר שמכיל את הנורמלים של הקודקודים של הרשת של הישות שהרכיב הזה נמצא בה. הערך של XrSpatialBufferEXT :: bufferType חייב להיות XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . ישות שיש לה XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT חייבת לכלול גם את XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. הנורמלים שסופקו על ידי הרכיב הזה חייבים להתאים לקודקודים שסופקו ב-XrSpatialMeshDataEXT :: vertexBuffer של הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.

מבנה רשימת הרכיבים לשליפת נתונים

המבנה של XrSpatialComponentMesh3DNormalsListEXT מוגדר כך:

typedef struct XrSpatialComponentMesh3DNormalsListEXT {
    XrStructureType        type;
    void*                  next;
    uint32_t               meshNormalsCount;
    XrSpatialBufferEXT*    meshNormals;
} XrSpatialComponentMesh3DNormalsListEXT;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה.
  • ‫meshNormalsCount הוא uint32_t שמתאר את מספר הרכיבים במערך meshNormals.
  • ‫meshNormals הוא מערך של XrVector3f .

סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_VALIDATION_FAILURE מ-xrQuerySpatialComponentDataEXT אם XrSpatialComponentMesh3DNormalsListEXT נמצא בשרשרת הבאה של XrSpatialComponentDataQueryResultEXT :: next אבל XrSpatialComponentDataQueryConditionEXT :: componentTypeCount הוא לא אפס ו-XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT לא נכלל ב-XrSpatialComponentDataQueryConditionEXT :: componentTypes .

זמן הריצה חייב להחזיר את הערך XR_ERROR_SIZE_INSUFFICIENT מ-xrQuerySpatialComponentDataEXT אם meshNormalsCount קטן מ-XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

שימוש תקין (משתמע)

  • ‫ חובה להפעיל את התוסף XR_EXT_spatial_mesh_tracking לפני שמשתמשים ב-XrSpatialComponentMesh3DNormalsListEXT
  • type חייב להיות XR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXT
  • next חייב להיות NULL או מצביע תקין למבנה הבא בשרשרת מבנים
  • meshNormals חייב להיות מצביע למערך של מבני meshNormalsCount XrSpatialBufferEXT
  • ‫ הפרמטר meshNormalsCount חייב להיות גדול מ-0

הגדרות אישיות

אם XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT מופיע ב-XrSpatialCapabilityComponentTypesEXT :: componentTypes עבור יכולת מסוימת, האפליקציה יכולה להפעיל אותה על ידי הכללת ה-enum ברשימה XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. הרכיב הזה לא דורש הגדרה מיוחדת כדי להיכלל בשרשרת הבאה של XrSpatialCapabilityConfigurationBaseHeaderEXT . עם זאת, מומלץ להשתמש ברכיב הזה ובנתונים שלו בשילוב עם הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.

תוויות סמנטיות של רשת

typedef enum XrSpatialMeshSemanticLabelEXT {
    XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT = 2,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT = 3,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT = 4,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT = 5,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT = 6,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT = 7,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT = 8,
    XR_SPATIAL_MESH_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMeshSemanticLabelEXT;

הספירה XrSpatialMeshSemanticLabelEXT מתארת קבוצה של תוויות סמנטיות לרשת. רכיבים מרחביים שונים משתמשים בזה כדי לתת משמעות לערכי uint8_t מ-XrSpatialBufferEXT לתוויות סמנטיות לכל קודקוד או לכל משולש. אפשר לעיין בקטעים תוויות סמנטיות של קודקודי רשת ותוויות סמנטיות של משולשי רשת

תוספים שרוצים להרחיב את קבוצת התוויות הסמנטיות הזו או להוסיף קבוצה חדשה משלהם לרשתות, צריכים לפעול לפי ההנחיות שמפורטות בהנחיות לעיצוב ולהרחבה של תוויות סמנטיות .

תיאור הטיפוס בן המנייה (enum)

XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT

זמן הריצה לא הצליח לסווג את הקודקוד או המשולש.

XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT

הקודקוד או המשולש ממופים לקומה.

XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT

הקודקוד או המשולש ממופים לקיר.

XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT

הקודקוד או המשולש ממופים לתקרה.

XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT

הקודקוד או המשולש ממופים לטבלה.

XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT

הקודקוד או המשולש ממופים לכיסא.

XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT

הקודקוד או המשולש ממופים לספה.

XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT

הקודקוד או המשולש ממופים לערוגה.

תוויות סמנטיות של קודקודי רשת

סקירה כללית של הרכיבים

‫XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT מספק תווית סמנטית אחת לכל קודקוד של הרשת של ישות מרחבית.

נתוני רכיבים

‫XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT משתמש ב-XrSpatialBufferEXT לנתונים שלו. ‫XrSpatialBufferEXT :: bufferId מייצג את המאגר שמכיל את התוויות הסמנטיות של הקודקודים של רשת האובייקטים של הישות שהרכיב הזה נמצא בה. הערך של XrSpatialBufferEXT :: bufferType חייב להיות XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . הערכים במאגר הנתונים הזמני תואמים לערכים של הספירה XrSpatialMeshSemanticLabelEXT. ישות שיש לה XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT חייבת לכלול גם את הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. התוויות הסמנטיות שסופקו על ידי הרכיב הזה חייבות להתאים לקודקודים שסופקו ב-XrSpatialMeshDataEXT :: vertexBuffer של הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. זה אומר שהתווית הסמנטית באינדקס נתון של נתוני המאגר המרחבי שסופקו על ידי הרכיב הזה תואמת לקודקוד באותו אינדקס שסופק על ידי XrSpatialMeshDataEXT :: vertexBuffer . זה גם אומר שהערך של xrGetSpatialBufferUint8EXT :: bufferCountOutput חייב להיות זהה לערך של המאגר הזמני של התוויות הסמנטיות של הוורטקסים ושל XrSpatialMeshDataEXT :: vertexBuffer .

מבנה רשימת הרכיבים לשליפת נתונים

המבנה של XrSpatialComponentMesh3DVertexSemanticLabelsListEXT מוגדר כך:

typedef struct XrSpatialComponentMesh3DVertexSemanticLabelsListEXT {
    XrStructureType        type;
    void*                  next;
    uint32_t               meshSemanticLabelsCount;
    XrSpatialBufferEXT*    meshSemanticLabels;
} XrSpatialComponentMesh3DVertexSemanticLabelsListEXT;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה.
  • ‫meshSemanticLabelsCount הוא uint32_t שמתאר את מספר הרכיבים במערך meshSemanticLabels.
  • ‫meshSemanticLabels הוא מערך של XrSpatialBufferEXT .

זמן הריצה חייב להחזיר את הערך XR_ERROR_VALIDATION_FAILURE מ-xrQuerySpatialComponentDataEXT אם XrSpatialComponentMesh3DVertexSemanticLabelsListEXT נמצא בשרשרת הבאה של XrSpatialComponentDataQueryResultEXT :: next אבל XrSpatialComponentDataQueryConditionEXT :: componentTypeCount הוא לא אפס ו-XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT לא כלול ב-XrSpatialComponentDataQueryConditionEXT :: componentTypes .

זמן הריצה חייב להחזיר את הערך XR_ERROR_SIZE_INSUFFICIENT מ-xrQuerySpatialComponentDataEXT אם meshSemanticLabelsCount קטן מ-XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

שימוש תקין (משתמע)

הגדרות אישיות

אם XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT מופיע ב-XrSpatialCapabilityComponentTypesEXT :: componentTypes עבור יכולת מסוימת, האפליקציה יכולה להפעיל אותה על ידי הכללת ה-enum ברשימה XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. הרכיב הזה לא דורש הגדרה מיוחדת כדי להיכלל בשרשרת הבאה של XrSpatialCapabilityConfigurationBaseHeaderEXT . עם זאת, מומלץ להשתמש ברכיב הזה ובנתונים שלו בשילוב עם הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. אי אפשר להפעיל את הרכיב הזה יחד עם XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT . אם אפליקציה מוסיפה גם את XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT וגם את XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ל-XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents , זמן הריצה חייב להחזיר את XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT . בנוסף, סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT אם האפליקציה מנסה להפעיל את שני הרכיבים ב-XrSpatialContextEXT נפרדים.

תוויות סמנטיות של משולשי רשת

סקירה כללית של הרכיבים

‫XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT מספק תווית סמנטית אחת לכל משולש ברשת של ישות מרחבית.

נתוני רכיבים

‫XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT משתמש ב-XrSpatialBufferEXT לנתונים שלו. ‫XrSpatialBufferEXT :: bufferId מייצג את המאגר שמכיל את התוויות הסמנטיות של המשולשים ברשת התלת-ממדית של הישות שהרכיב הזה נמצא בה. הערך של XrSpatialBufferEXT :: bufferType חייב להיות XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . הערכים במאגר הנתונים הזמני תואמים לערכים של הספירה XrSpatialMeshSemanticLabelEXT. ישות שיש לה XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT חייבת לכלול גם את הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. התוויות הסמנטיות שהרכיב הזה מספק חייבות להתאים למשולשים שסופקו ב-XrSpatialMeshDataEXT של הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. מספר הרכיבים במאגר הנתונים המרחבי שמכיל את התוויות הסמנטיות של המשולשים הוא מספר הרכיבים של XrSpatialMeshDataEXT :: indexBuffer חלקי 3. כלומר, התווית הסמנטית באינדקס נתון של נתוני המאגר המרחבי שסופקו על ידי הרכיב הזה תואמת למשולש שמיוצג על ידי [index * 3],‏ [index * 3 + 1],‏ [index * 3 + 2] ב-XrSpatialMeshDataEXT :: indexBuffer .

מבנה רשימת הרכיבים לשליפת נתונים

המבנה של XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT מוגדר כך:

typedef struct XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT {
    XrStructureType        type;
    void*                  next;
    uint32_t               meshSemanticLabelsCount;
    XrSpatialBufferEXT*    meshSemanticLabels;
} XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT;

תיאורי חברים

  • ‫type הוא ה-XrStructureType של המבנה הזה.
  • ‫next הוא NULL או מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה.
  • ‫meshSemanticLabelsCount הוא uint32_t שמתאר את מספר הרכיבים במערך meshSemanticLabels.
  • ‫meshSemanticLabels הוא מערך של XrSpatialBufferEXT .

זמן הריצה חייב להחזיר את הערך XR_ERROR_VALIDATION_FAILURE מ-xrQuerySpatialComponentDataEXT אם XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT נמצא בשרשרת הבאה של XrSpatialComponentDataQueryResultEXT :: next אבל XrSpatialComponentDataQueryConditionEXT :: componentTypeCount הוא לא אפס ו-XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT לא כלול ב-XrSpatialComponentDataQueryConditionEXT :: componentTypes .

זמן הריצה חייב להחזיר את הערך XR_ERROR_SIZE_INSUFFICIENT מ-xrQuerySpatialComponentDataEXT אם meshSemanticLabelsCount קטן מ-XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

שימוש תקין (משתמע)

הגדרות אישיות

אם XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT מופיע ב-XrSpatialCapabilityComponentTypesEXT :: componentTypes עבור יכולת מסוימת, האפליקציה יכולה להפעיל אותה על ידי הכללת ה-enum ברשימה XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. הרכיב הזה לא דורש הגדרה מיוחדת כדי להיכלל בשרשרת הבאה של XrSpatialCapabilityConfigurationBaseHeaderEXT . עם זאת, מומלץ להשתמש ברכיב הזה ובנתונים שלו בשילוב עם הרכיב XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. אי אפשר להפעיל את הרכיב הזה יחד עם XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT . אם אפליקציה מוסיפה גם את XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT וגם את XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ל-XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents , זמן הריצה חייב להחזיר את XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT . בנוסף, סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT אם האפליקציה מנסה להפעיל את שני הרכיבים ב-XrSpatialContextEXT נפרדים.

מבנים חדשים

ערכי Enums חדשים

קבועי Enum חדשים

  • XR_EXT_SPATIAL_MESH_TRACKING_EXTENSION_NAME
  • XR_EXT_spatial_mesh_tracking_SPEC_VERSION
  • הרחבה של XrSpatialCapabilityEXT :

    • XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
  • הרחבה של XrSpatialCapabilityFeatureEXT :

    • XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
  • הרחבה של XrSpatialComponentTypeEXT :

    • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
    • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
    • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
  • הרחבה של XrStructureType :

    • XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXT
    • XR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT

בעיות

היסטוריית הגרסאות

  • גרסה 1, 2025-11-02 (Nihav Jain, Google)

    • תיאור התוסף הראשוני