מחרוזת שם
XR_ANDROID_scene_meshing
סוג התוסף תוסף מופע
מספר שלוחה רשום 464
Revision 3
Extension and Version Dependencies OpenXR 1.0
תאריך השינוי האחרון 2025-05-15
סטטוס כתובת ה-IP לא ידוע על תלונות לגבי כתובת ה-IP.
תודות Spencer Quin, Google Jared Finder, Google Antonio Fontan, Google Cairn Overturf, Google Nihav Jain, Google Salar Khan, Google Sebastian Klose, Google Jürgen Sturm, Google Vinny DaSilva, Google Ricardo Campbell, Google
סקירה כללית
התוסף הזה נועד לספק נתוני רשתות של רשתות שמייצגות בקירוב את האובייקטים הפיזיים בסביבה שלכם. אפשר להשתמש בו כדי להמחיש את הסצנה באפליקציה סוחפת, וכדי לאפשר לאובייקטים וירטואליים ליצור אינטראקציה עם אובייקטים פיזיים, למשל התנגשויות.
נתונים של מיפוי סצנות יכולים להיות מידע אישי רגיש, והם קשורים קשר הדוק לפרטיות ולשלמות האישית. מומלץ מאוד שאפליקציות שמאחסנות או מעבירות נתונים של מיפוי סצנות תמיד יבקשו מהמשתמש אישור פעיל וספציפי לעשות זאת.
הרשאות
אפליקציות ל-Android חייבות לכלול את ההרשאה android.permission.SCENE_UNDERSTANDING_FINE
בקובץ המניפסט שלהן.
ההרשאה android.permission.SCENE_UNDERSTANDING_FINE
נחשבת להרשאה רגישה כי היא מאפשרת לסביבת זמן הריצה ללמוד את סביבת המשתמש.
האפליקציה חייבת לבקש את ההרשאה בזמן הריצה כדי להשתמש בפונקציות האלה:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(רמת הגנה: מסוכן)
בדיקת יכולות המערכת
אפליקציה יכולה לבדוק אם המערכת מסוגלת ליצור מיפוי של סצנות על ידי שרשור של מבנה XrSystemSceneMeshingPropertiesANDROID אל XrSystemProperties כשקוראים ל-xrGetSystemProperties.
XrSystemSceneMeshingPropertiesANDROID
typedef struct XrSystemSceneMeshingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
supportsSceneMeshing
הוא XrBool32, שמציין אם המערכת תומכת במיזוג סצנות.
אם הערך של supportsSceneMeshing
הוא XR_FALSE
, המערכת לא תומכת במיזוג סצנות.
מומלץ להימנע משימוש בפונקציונליות של מיפוי סצנות כשערך המשתנה supportsSceneMeshing
הוא XR_FALSE
, כי קריאות לפונקציה xrCreateSceneMeshingTrackerANDROID ייכשלו.
אם הערך של supportsSceneMeshing
הוא XR_TRUE
, המערכת תומכת במיזוג סצנות.
שימוש תקין (משתמע)
XR_ANDROID_scene_meshing
חייב להיות מופעל לפני שמשתמשים ב-XrSystemSceneMeshingPropertiesANDROID- הערך של
type
חייב להיותXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
next
must beNULL
or a valid pointer to the next structure in a structure chain
XrSceneMeshSemanticLabelSetANDROID
הספירה XrSceneMeshSemanticLabelSetANDROID מתארת את קבוצות התוויות הסמנטיות עבור מיפוי רשתות של סצנות.
כל ערך ב-enum הזה מייצג enum אחר שמכיל את התוויות הסמנטיות.
לדוגמה, הערך XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
מייצג את הקבוצה XrSceneMeshSemanticLabelANDROID.
typedef enum XrSceneMeshSemanticLabelSetANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;
xrEnumerateSupportedSemanticLabelSetsANDROID
האפליקציה יכולה לקבל קבוצות של תוויות סמנטיות שנתמכות על ידי המערכת באמצעות הפונקציה xrEnumerateSupportedSemanticLabelSetsANDROID.
XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets);
תיאורי פרמטרים
-
instance
הוא XrInstance שנוצר על ידי האפליקציה. -
systemId
הוא XrSystemId שבוצעה לו פעולת ניסיון חוזר מ-xrGetSystem. -
supportedSemanticLabelSetsInputCapacity
הוא האורך שלsupportedSemanticLabelSets
. -
supportedSemanticLabelSetsOutputCount
הוא מספר הרכיבים ב-supportedSemanticLabelSets
ששונה על ידי זמן הריצה החל מתחילת המערך. -
supportedSemanticLabelSets
הוא מערך של XrSceneMeshSemanticLabelSetANDROID שזמן הריצה כותב אליו את קבוצות התוויות הסמנטיות הנתמכות.
מצופה שכל מערכת תתמוך לפחות ב-XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
כי ערך ה-enum הזה מייצג קבוצה של תוויות סמנטיות שלא הוגדרו, ואפשר להשתמש בו אם לא צריך סמנטיקה של קודקודים באפליקציה.
יצירת כינוי למעקב אחרי מיזוג סצנות
XrSceneMeshingTrackerANDROID
XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)
ה-handle XrSceneMeshingTrackerANDROID מייצג אמצעי מעקב אחר מיפוי סצנות למיפוי סצנות ולניהול המשאבים הקשורים.
אפשר להשתמש בכינוי הזה כדי ליצור תמונת מצב של רשת סצנה באמצעות xrCreateSceneMeshSnapshotANDROID בתוסף הזה.
xrCreateSceneMeshingTrackerANDROID
אפליקציה יכולה ליצור נקודת אחיזה מסוג XrSceneMeshingTrackerANDROID באמצעות הפונקציה xrCreateSceneMeshingTrackerANDROID.
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
תיאורי פרמטרים
-
session
הוא XrSession שבו יופעל מעקב אחר מיפוי הרשת של הסצנה. -
createInfo
הוא מצביע למבנה XrSceneMeshingTrackerCreateInfoANDROID שמשמש לתיאור של כלי המעקב אחר רשת הסצנה שייווצר. -
tracker
הוא ה-handle של XrSceneMeshingTrackerANDROID שמוחזר.
אם המערכת לא תומכת במיזוג סצנות, הפונקציה xrCreateSceneMeshingTrackerANDROID תחזיר את הערך
XR_ERROR_FEATURE_UNSUPPORTED
.
האפליקציה יכולה לבדוק אם יש תמיכה במערכת על ידי קריאה ל-xrGetSystemProperties עם המבנה XrSystemSceneMeshingPropertiesANDROID.
אפשר להשתמש רק בערכות של תוויות סמנטיות שנתמכות על ידי המערכת ב-XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet כשיוצרים כלי למעקב אחר רשתות של סצנות. אפשר להשתמש בפונקציה xrEnumerateSupportedSemanticLabelSetsANDROID כדי לקבל את רשימת קבוצות התוויות הסמנטיות הנתמכות.
אם האפליקציה מבקשת semanticLabelSet
שלא נתמך, הפונקציה xrCreateSceneMeshingTrackerANDROID תחזיר את הערך XR_ERROR_FEATURE_UNSUPPORTED
.
ה-handle xrCreateSceneMeshingTrackerANDROID הוא הבעלים של כל המשאבים של מיפוי הרשת של הסצנה. בסיום השימוש בחוויית מיפוי הסצנה, האפליקציה חייבת להרוס את ה-handle באמצעות הפונקציה xrDestroySceneMeshingTrackerANDROID.
XrSceneMeshingTrackerCreateInfoANDROID
המבנה XrSceneMeshingTrackerCreateInfoANDROID מתאר את המידע ליצירת נקודת אחיזה XrSceneMeshingTrackerANDROID.
typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet;
XrBool32 enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
semanticLabelSet
הוא XrSceneMeshSemanticLabelSetANDROID שמשמש לציון קבוצת התוויות הסמנטיות שתשמש למיפוי הסצנה. אם הערך הואXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
, סביבת זמן הריצה מתעלמת משדה המאגר XrSceneSubmeshDataANDROID::vertexSemantics. -
enableNormals
הוא XrBool32 שמשמש כדי לציין אם לכלול את הנורמלים של הקודקודים של רשת המשולשים במאגר של רשת המשולשים של הסצנה כשמקבלים את נתוני רשת המשולשים של הסצנה.
xrDestroySceneMeshingTrackerANDROID
הפונקציה xrDestroySceneMeshingTrackerANDROID משחררת את tracker
ואת המשאבים הבסיסיים כשמסיימים את השימוש בחוויות של מיפוי סצנות.
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
תיאורי פרמטרים
-
tracker
הוא XrSceneMeshingTrackerANDROID שנוצר קודם על ידי xrCreateSceneMeshingTrackerANDROID.
יצירת כינוי לקובץ snapshot של רשת סצנה
XrSceneMeshSnapshotANDROID
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
ה-handle XrSceneMeshSnapshotANDROID מייצג תמונת מצב של רשת סצנה. הוא נוצר באמצעות xrCreateSceneMeshSnapshotANDROID, שלמעשה לוכד תמונה של נתוני רשת הסצנה בזמן הקריאה לפונקציה.
אפשר להשתמש ב-handle הזה כדי לאחזר מידע ונתונים על רשתות משנה באמצעות xrGetAllSubmeshStatesANDROID ו-xrGetSubmeshDataANDROID.
XrSceneMeshSnapshotCreateInfoANDROID
המבנה XrSceneMeshSnapshotCreateInfoANDROID מתאר את המידע ליצירת נקודת זמן של רשת תלת-ממדית של סצנה XrSceneMeshSnapshotANDROID
typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrBoxf boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
baseSpace
הוא XrSpace שמשמש לתיאור מרחב ההפניה שבו צריך לייצג את נתוני התנוחה של רשתות המשנה של הסצנה. -
time
הוא XrTime שמתאר את הזמן שבו רשת הסצנה תעובד או תוצג. -
boundingBox
הוא XrBoxf שמתאר את התיבה התוחמת שבתוכה יתבצע איסוף של רשת הסצנה.
XrSceneMeshTrackingStateANDROID
הספירה XrSceneMeshTrackingStateANDROID מתארת את מצב המעקב של כלי המעקב אחר רשתות תלת-ממדיות של סצנות. כל ערך ב-enum הזה מייצג מצב של כלי המעקב אחר מיזוג הסצנה. ה-enum הזה עטוף במבנה XrSceneMeshSnapshotCreationResultANDROID שמוחזר מ-xrCreateSceneMeshSnapshotANDROID.
typedef enum XrSceneMeshTrackingStateANDROID {
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;
XrSceneMeshSnapshotCreationResultANDROID
המבנה XrSceneMeshSnapshotCreationResultANDROID מאחסן את התוצאה של יצירת קובץ snapshot של רשת הסצנה שמוחזרת מ-xrCreateSceneMeshSnapshotANDROID. התוצאה כוללת את נקודת האחיזה של ה-snapshot ואת מצב המעקב של כלי המעקב של מיפוי התלת-ממד של הסצנה בזמן יצירת ה-snapshot.
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
void* next;
XrSceneMeshSnapshotANDROID snapshot;
XrSceneMeshTrackingStateANDROID trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
snapshot
הוא אובייקט מסוג XrSceneMeshSnapshotANDROID שנוצר על ידי זמן הריצה. -
trackingState
הוא XrSceneMeshTrackingStateANDROID שמתאר את המצב של כלי המעקב אחר רשת הסצנה בזמן יצירת תמונת המצב.
xrCreateSceneMeshSnapshotANDROID
האפליקציה יכולה להשתמש בפונקציה xrCreateSceneMeshSnapshotANDROID כדי ליצור תמונת מצב של רשת הסצנה מהכלי למעקב אחר רשת הסצנה. הפונקציה מחזירה נקודת אחיזה מסוג XrSceneMeshSnapshotANDROID יחד עם XrSceneMeshTrackingStateANDROID שעטופה במבנה XrSceneMeshSnapshotCreationResultANDROID. מבחינה טכנית, נקודת האחיזה היא תמונת מצב של נתוני רשת הסצנה בזמן היצירה. אפשר להשתמש בכינוי הזה כדי לבצע שאילתות על המידע והנתונים של רשת הסצנה באמצעות הפונקציות xrGetAllSubmeshStatesANDROID ו-xrGetSubmeshDataANDROID, בהתאמה.
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
תיאורי פרמטרים
-
tracker
הוא אובייקט XrSceneMeshingTrackerANDROID שנוצר קודם באמצעות xrCreateSceneMeshingTrackerANDROID. -
createInfo
הוא מצביע למבנה XrSceneMeshSnapshotCreateInfoANDROID שמכיל את המידע הנדרש ליצירת תמונת מצב של רשת הסצנה. -
outSnapshotCreationResult
הוא מצביע לאובייקט XrSceneMeshSnapshotCreationResultANDROID שאוכלס על ידי זמן הריצה עם תוצאת יצירת תמונת המצב.
איך מקבלים נתוני רשת של סצנה מתמונת מצב של רשת הסצנה
XrSceneSubmeshStateANDROID
XrSceneSubmeshStateANDROID מתאר רשת משנה. הוא מכיל את המידע הבסיסי על רשת המשנה (מזהה, תנוחה, גבולות, מועד העדכון האחרון).
typedef struct XrSceneSubmeshStateANDROID {
XrStructureType type;
void* next;
XrUuid submeshId;
XrTime lastUpdatedTime;
XrPosef submeshPoseInBaseSpace;
XrExtent3Df bounds;
} XrSceneSubmeshStateANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
submeshId
הוא XrUuid שמזהה את רשת המשנה. -
lastUpdatedTime
הוא XrTime שמייצג את הזמן שבו עודכן לאחרונה רכיב המשנה. -
submeshPoseInBaseSpace
הוא XrPosef שמייצג את התנוחה של רשת המשנה במרחב הבסיסי ששימש ליצירת ה-snapshot של רשת הסצנה. זו גם התנוחה של מרכז התיבה התוחמת של רשת המשנה. -
bounds
הוא XrExtent3Df שמתאר את המידות של התיבה התוחמת שמקיפה את רשת המשנה. התיחום הזה נמצא במרחב הבסיס ששימש ליצירת נקודת האחיזה של רשת הסצנה.
xrGetAllSubmeshStatesANDROID
האפליקציה יכולה להשתמש בפונקציה xrGetAllSubmeshStatesANDROID כדי לקבל את המצב של כל רשתות המשנה ברשת הסצנה. המידע הזה מכיל פרטים בסיסיים שמאפשרים לאפליקציה לבחור רשתות משנה שהאפליקציה רוצה לקבל לגביהן נתונים. אפשר להשתמש בפונקציה הזו בביטוי של 2 קריאות.
XrResult xrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates);
תיאורי פרמטרים
-
snapshot
הוא מאחזת XrSceneMeshSnapshotANDROID שנוצרה קודם באמצעות xrCreateSceneMeshSnapshotANDROID. -
submeshStateCapacityInput
הוא האורך שלsubmeshStates
. -
submeshStateCountOutput
הוא מספר הרכיבים ב-submeshStates
שמשתנים על ידי זמן הריצה החל מתחילת המערך. -
submeshStates
הוא מערך של מבני XrSceneSubmeshStateANDROID שאליהם זמן הריצה יוציא את המצב של כל רשתות המשנה ברשת הסצנה.
XrSceneSubmeshDataANDROID
XrSceneSubmeshDataANDROID מכיל את נתוני המשולשים של רשת משנה יחד עם מזהה רשת המשנה. המבנה הזה משמש בפונקציה xrGetSubmeshDataANDROID כדי לקבל את הנתונים של רשת המשנה. האפליקציה חייבת להגדיר את מזהה רשת המשנה של המבנה הזה ואת מצביעי המאגר למאגרים שהוקצו, כדי שאפשר יהיה לאכלס את הנתונים שהוחזרו עבור רשת המשנה במאגרים שהוקצו. האפליקציה יכולה להשתמש ב-xrGetSubmeshDataANDROID כביטוי של 2 קריאות, שבו הקריאה הראשונה תדרוש מהאפליקציה להגדיר את מזהה רשת המשנה ולקבל את הגדלים של המאגרים הנדרשים לנתוני רשת המשנה, ואז האפליקציה יכולה להקצות את המאגרים ולקבל את הנתונים בקריאה השנייה.
typedef struct XrSceneSubmeshDataANDROID {
XrStructureType type;
const void* next;
XrUuid submeshId;
uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector3f* vertexPositions;
XrVector3f* vertexNormals;
uint8_t* vertexSemantics;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t* indices;
} XrSceneSubmeshDataANDROID;
תיאורי חברים
-
type
הוא XrStructureType של המבנה הזה. -
next
הואNULL
או מצביע למבנה הבא בשרשרת של מבנים. לא מוגדרים מבנים כאלה ב-OpenXR הבסיסי או בתוסף הזה. -
submeshId
הוא XrUuid שמזהה את רשת המשנה. -
vertexCapacityInput
הוא האורך שלvertexPositions
,vertexNormals
ו-vertexSemantics
. -
vertexCountOutput
הוא מספר הרכיבים ב-vertexPositions
, ב-vertexNormals
וב-vertexSemantics
ששונו על ידי זמן הריצה החל מתחילת המערך. -
vertexPositions
הוא מערך של XrVector3f שהסביבה בזמן הריצה תוציא אליו את מיקומי הקודקודים של רשת המשנה. -
vertexNormals
הוא מערך של XrVector3f שהסביבה בזמן הריצה תוציא אליו את הנורמלים של הקודקודים של רשת המשנה. אפשר להשאיר את השדה הזה ריקNULL
אם האפליקציה יצרה כלי מעקב עם השבתה של הנורמלים. -
vertexSemantics
היא מערך שלuint8_t
שאליו זמן הריצה יוציא את הסמנטיקה של הקודקודים של רשת המשנה. אפשר להשאיר את השדה הזה ריקNULL
אם האפליקציה יצרה כלי מעקב עםXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
תווית סמנטית מוגדרת. -
indexCapacityInput
הוא האורך שלindices
. -
indexCountOutput
הוא מספר הרכיבים ב-indices
שעברו שינוי בזמן הריצה, החל מתחילת המערך. -
indices
הוא מערך שלuint32_t
שאליו זמן הריצה יוציא את האינדקסים של רשת המשנה.
xrGetSubmeshDataANDROID
האפליקציה יכולה להשתמש בפונקציה xrGetSubmeshDataANDROID כדי לקבל את הנתונים של רשימה נבחרת של רשתות משנה. אפשר להשתמש בפונקציה הזו בביטוי של 2 קריאות. בשיחה הראשונה, האפליקציה חייבת להגדיר מזהה תקף של רשת משנה (כלומר: ניתן לאחזר מ-xrGetAllSubmeshStatesANDROID עם אותו צילום מצב של רשת הסצנה) וקיבולת אפס לכל רכיב ברשימה הנבחרת של רשתות המשנה כדי לקבל את הגדלים של המאגרים שנדרשים לנתוני רשת המשנה. בשיחה השנייה, האפליקציה חייבת להגדיר את מצביעי המאגר למאגר שהוקצה לכל רכיב ברשימת המשנה שנבחרה, יחד עם הקיבולת של המאגרים, כדי לקבל את הנתונים של רשתות המשנה.
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
תיאורי פרמטרים
-
snapshot
הוא מאחזת XrSceneMeshSnapshotANDROID שנוצרה קודם באמצעות xrCreateSceneMeshSnapshotANDROID. -
submeshDataCount
הוא האורך שלinoutSubmeshData
. -
inoutSubmeshData
הוא מערך של XrSceneSubmeshDataANDROID שבו כל רכיב יאוכלס בנתוני הרשת על ידי זמן הריצה על סמך מזהה רשת המשנה.
XrSceneMeshSemanticLabelANDROID
הספירה XrSceneMeshSemanticLabelANDROID היא קבוצת ברירת המחדל של תוויות סמנטיות שאפשר להשתמש בהן כדי לתייג קודקודים של רשתות, כדי לתאר את פני השטח של הסביבה הפיזית שבה נמצא הקודקוד של הרשת.
קבוצת ה-enum הזו מיוצגת על ידי הערך XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
ב-XrSceneMeshSemanticLabelSetANDROID.
typedef enum XrSceneMeshSemanticLabelANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;
מחיקת תמונת מצב של רשת סצנה
xrDestroySceneMeshSnapshotANDROID
האפליקציה יכולה להשתמש בפונקציה xrDestroySceneMeshSnapshotANDROID כדי להרוס תמונה של רשת סצנה. אחרי שהידית נמחקת, האפליקציה לא יכולה יותר להשתמש בה כדי לקבל את המידע או הנתונים של רשת המשנה. ה-handle נמחק אוטומטית כשה-tracker נמחק, כי ה-handle של ה-tracker הוא ההורה של ה-handle של תמונת הרשת של הסצנה.
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
תיאורי פרמטרים
-
snapshot
הוא טיפול ב-XrSceneMeshSnapshotANDROID שנוצר בעבר באמצעות xrCreateSceneMeshSnapshotANDROID שיושמד על ידי הפונקציה הזו.
קוד לדוגמה ליצירת רשת של סצנה
הקוד לדוגמה הבא מראה איך לגשת לנתוני רשת של סצנה לצורך עיבוד.
XrInstance instance; // Created at app startup
XrSystemId systemId; // Received from xrGetSystem() at app startup
XrSession session; // Created at app startup
XrSpace appPlaySpace; // Created at app startup
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;
// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
.type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
// scene meshing is not supported.
return;
}
uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, supportedsemanticLabelSetsCount,
&supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
supportedSemanticLabelSets.end()) {
semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}
XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
.type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
.semanticLabelSet = semanticLabelSet,
.enableNormals = XR_TRUE
};
XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));
XrSceneMeshSnapshotCreationResultANDROID snapshotResult = {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
.snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo = {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};
// app update loop
while (true) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrBoxf box; // populated with the bounding box of the camera frustum
// ...
createInfo.baseSpace = appPlaySpace;
createInfo.time = time;
createInfo.boundingBox = box;
// Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
// choose the appropriate submeshes for which to get data, allocate the necessary
// buffer for those submeshes, and then get the data.
CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));
// check the tracking state
if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
// unrecoverable error. Exit the app.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
break;
} else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
// The tracker is not tracking. Try again later.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
continue;
}
// 2-call idiom for getting submesh states
std::vector<XrSceneSubmeshStateANDROID> states;
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
states.resize(submeshCount);
for (XrSceneSubmeshStateANDROID& state : states) {
state = {.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID};
}
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));
// To store the poses for the selected submeshes
std::vector<XrPosef> submeshesPoses;
submeshesPoses.reserve(submeshCount);
std::vector<XrSceneSubmeshDataANDROID> submeshes;
submeshes.reserve(submeshCount);
// Iterate the states and determine which submeshes the app wants data for
for (XrSceneSubmeshStateANDROID& state : states) {
// Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
// is below a threshold or maybe the bounding box does not intersect with camera view
// frustum (The submesh will be culled).
bool needed;
if (needed) {
// Add the selected submesh to the submeshes list. Set the capacity
// zero for now since the size of the buffer will be determined later.
XrSceneSubmeshDataANDROID submesh = {
.type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
.submeshId = state.submeshId,
.vertexCapacityInput = 0,
.vertexCountOutput = 0,
.vertexPositions = nullptr,
.vertexNormals = nullptr,
.vertexSemantics = nullptr,
.indexCapacityInput = 0,
.indexCountOutput = 0,
.indices = nullptr,
};
submeshes.push_back(submesh);
submeshesPoses.push_back(state.submeshPoseInBaseSpace);
}
}
// Grab the data for the selected submeshes using the 2-call idiom.
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
submesh.vertexCapacityInput = submesh.vertexCountOutput;
submesh.vertexCountOutput = 0;
submesh.vertexPositions = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCountOutput];
}
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
// Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
// next iteration app can: create a new one to get latest mesh data
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
// Iterate the submeshes and get the vertex positions, vertex normals and
// vertex semantics data for the selected submeshes
for (uint32_t i = 0; i < submeshes.size(); i++) {
XrSceneSubmeshDataANDROID& data = submeshes[i];
XrVector3f* vertexPositions = data.vertexPositions;
XrVector3f* vertexNormals = data.vertexNormals;
XrSceneMeshSemanticLabelANDROID* vertexSemantics =
reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
סוגי אובייקטים חדשים
New Enum Constants
הספירה XrObjectType הורחבה עם:
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
הספירה XrStructureType הורחבה עם:
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID
XR_TYPE_SCENE_SUBMESH_STATE_ANDROID
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID
New Enums
מבנים חדשים
- XrSystemSceneMeshingPropertiesANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneSubmeshStateANDROID
- XrSceneSubmeshDataANDROID
פונקציות חדשות
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
בעיות
היסטוריית הגרסאות
- גרסה 3, 2025-05-15 (סלאר חאן) ** תיאור ראשוני של התוסף
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc. והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.