XR_ANDROID_spatial_discovery_bounds
מחרוזת שם
XR_ANDROID_spatial_discovery_bounds
סוג התוסף
תוסף למכונה
מספר השלוחה הרשום
762
גרסה
1
סטטוס האישור
לא אושר
תלויות של תוספים וגרסאות
XR_EXT_spatial_entity
שותפים ביצירת התוכן
ניהאב ג'יין, גוגל
נטלי פלורי, מטא
Yuichi Taguchi, מטה
יין לי, מיקרוסופט
רון בסמס, מטא
קרת'יק קדאפן, קפיצת הקסם
ג'ימי אלמפרמביל, בייטדאנס
Zhipeng Liu, ByteDance
ג'ון יאן, בייטדאנס
סקירה כללית
התוסף הזה מוסיף הגדרות לגבולות מרחביים שמאפשרות לאפליקציות לסנן ישויות מרחביות שזוהו כשמפעילים את xrCreateSpatialDiscoverySnapshotAsyncEXT .
גבולות מרחביים
המבנה של XrSpatialBoundsSpherefANDROID מוגדר כך:
typedef struct XrSpatialBoundsSpherefANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrSpheref sphere;
} XrSpatialBoundsSpherefANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
spaceהוא ה-XrSpace שבו מוגדרות כל התנוחות של הגבולות. -
timeהואXrTimeשבו מוגדרות התנוחות של הגבולות. -
sphereהוא XrSpheref שמתאר את הנפח הכדורי שבו זמן הריצה חייב להגביל את הגילוי של ישויות מרחביות.
יכולות מרחביות שתומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID (כפי שמפורט על ידי xrEnumerateSpatialCapabilityFeaturesEXT ) מאפשרות לאפליקציה להגביל את הגילוי לישויות מרחביות שהמיקום או הגבולות שלהן נמצאים בתוך sphere או חופפים לו, על ידי שרשור של XrSpatialBoundsSpherefANDROID אל XrSpatialDiscoverySnapshotCreateInfoEXT :: next . בתמונת מצב של גילוי שבה היכולת הרלוונטית תומכת ב-XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID , אם המבנה הזה קיים בשרשרת next, זמן הריצה לא יכול לכלול ישויות מרחביות שהמיקום או הגבולות שלהן נמצאים לגמרי מחוץ ל-sphere .
חשוב לציין שההכללה של XrSpatialBoundsSpherefANDROID בשרשרת הבאה של XrSpatialDiscoverySnapshotCreateInfoEXT פועלת כתנאי AND עם המסננים האחרים שסופקו. אסור לכלול בתמונת המצב של החיפוש ישויות שמגיעות מיכולות מרחביות שלא תומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID. ההתנהגות הזו שונה משאר המפרט של OpenXR, שבו מבנים לא מזוהים או לא נתמכים בשרשרת המצביעים הבאה נמחקים על ידי זמן הריצה. בנוסף, כמו שמתואר בקטע ייחודיות המבנה של השרשרת הבאה, זמן הריצה יעבד רק את המופע הראשון של המבנה XrSpatialBoundsSpherefANDROID בשרשרת הבאה.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_spatial_discovery_boundsלפני שמשתמשים ב-XrSpatialBoundsSpherefANDROID -
typeחייב להיותXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace
המבנה של XrSpatialBoundsBoxfANDROID מוגדר כך:
typedef struct XrSpatialBoundsBoxfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrBoxf box;
} XrSpatialBoundsBoxfANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
spaceהוא ה-XrSpace שבו מוגדרות כל התנוחות של הגבולות. -
timeהואXrTimeשבו מוגדרות התנוחות של הגבולות. -
boxהוא XrBoxf שמתאר את נפח התיבה שבה זמן הריצה חייב להגביל את הגילוי של ישויות מרחביות.
יכולות מרחביות שתומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID (כפי שמפורט ב-xrEnumerateSpatialCapabilityFeaturesEXT) מאפשרות לאפליקציה להגביל את הגילוי לישויות מרחביות שהמיקום או הגבולות שלהן נמצאים בתוך box או חופפים לו, על ידי שרשור של XrSpatialBoundsBoxfANDROID אל XrSpatialDiscoverySnapshotCreateInfoEXT :: next . בתמונת מצב של גילוי שבה היכולת הרלוונטית תומכת ב-XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID , אם המבנה הזה קיים בשרשרת next, זמן הריצה לא יכול לכלול ישויות מרחביות שהמיקום או הגבולות שלהן נמצאים לגמרי מחוץ ל-box .
חשוב לציין שההכללה של XrSpatialBoundsBoxfANDROID בשרשרת הבאה של XrSpatialDiscoverySnapshotCreateInfoEXT פועלת כתנאי AND עם המסננים האחרים שסופקו. אסור לכלול בתמונת המצב של החיפוש ישויות שמגיעות מיכולות מרחביות שלא תומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID. ההתנהגות הזו שונה משאר המפרט של OpenXR, שבו מבנים לא מזוהים או לא נתמכים בשרשרת המצביעים הבאה נמחקים על ידי זמן הריצה. בנוסף, כמו שמתואר בקטע ייחודיות של מבנה השרשרת הבא, זמן הריצה יעבד רק את המופע הראשון של המבנה XrSpatialBoundsBoxfANDROID בשרשרת הבאה.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_spatial_discovery_boundsלפני שמשתמשים ב-XrSpatialBoundsBoxfANDROID -
typeחייב להיותXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace
המבנה של XrSpatialBoundsFrustumfANDROID מוגדר כך:
typedef struct XrSpatialBoundsFrustumfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrFrustumf frustum;
} XrSpatialBoundsFrustumfANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. -
spaceהוא ה-XrSpace שבו מוגדרות כל התנוחות של הגבולות. -
timeהואXrTimeשבו מוגדרות התנוחות של הגבולות. -
frustumהוא XrFrustumf שמתאר את נפח הפירמידה הקטומה שבה זמן הריצה חייב להגביל את הגילוי של ישויות מרחביות.
יכולות מרחביות שתומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID (כפי שמפורט ב-xrEnumerateSpatialCapabilityFeaturesEXT) מאפשרות לאפליקציה להגביל את הגילוי לישויות מרחביות שהמיקום או הגבולות שלהן נמצאים בתוך frustum או חופפים לו, על ידי שרשור של XrSpatialBoundsFrustumfANDROID אל XrSpatialDiscoverySnapshotCreateInfoEXT :: next . בתמונת מצב של גילוי שבה היכולת הרלוונטית תומכת ב-XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID , אם המבנה הזה קיים בשרשרת next, זמן הריצה לא יכול לכלול ישויות מרחביות שהמיקום או הגבולות שלהן נמצאים לגמרי מחוץ ל-frustum .
חשוב לציין שההכללה של XrSpatialBoundsFrustumfANDROID בשרשרת הבאה של XrSpatialDiscoverySnapshotCreateInfoEXT פועלת כתנאי AND עם המסננים האחרים שסופקו. אסור לכלול בתמונת המצב של החיפוש ישויות שמגיעות מיכולות מרחביות שלא תומכות ב-XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID. ההתנהגות הזו שונה משאר המפרט של OpenXR, שבו מבנים לא מזוהים או לא נתמכים בשרשרת המצביעים הבאה נמחקים על ידי זמן הריצה. בנוסף, כמו שמתואר בקטע ייחודיות המבנה של השרשרת הבאה, זמן הריצה יעבד רק את המופע הראשון של המבנה XrSpatialBoundsFrustumfANDROID בשרשרת הבאה.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_spatial_discovery_boundsלפני שמשתמשים ב-XrSpatialBoundsFrustumfANDROID -
typeחייב להיותXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace
דוגמה
הקוד הבא מדגים איך להשתמש בגבולות מרחביים כדי לסנן את הגילוי של ישויות מרחביות.
// previously initialized & configured with the XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability.
XrSpatialContextEXT spatialContext;
// Enumerate supported features for XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability
uint32_t featureCount = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> fooFeatures(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, featureCount, &featureCount, fooFeatures.data()));
// Check if spatial sphere bounds filter is supported
const auto supportsFeature = [&fooFeatures](XrSpatialCapabilityFeatureEXT feature) {
return std::find(fooFeatures.begin(), fooFeatures.end(), feature) != fooFeatures.end();
};
const bool supportsSphereBoundsFilter = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID);
// We want to look for entities in a sphere around the head with a radius of 2m.
XrSpatialBoundsSpherefANDROID sphereBounds {
.type = XR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID,
.space = viewSpace,
.time = predictedDisplayTime,
.sphere = {
.center = {
.orientation = {
.w = 1.0f,
},
},
.radius = 2.0f,
},
};
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents{XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
.type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
.next = supportsSphereBoundsFilter ? &sphereBounds : nullptr,
.componentTypeCount = snapshotComponents.size(),
.componentTypes = snapshotComponents.data(),
};
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
מבנים חדשים
הרחבה של XrSpatialDiscoverySnapshotCreateInfoEXT :
קבועי Enum חדשים
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONהרחבה של XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
הרחבה של XrStructureType :
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
בעיות
למה התמיכה בגבולות מרחביים תלויה בהגדרה של XrSpatialCapabilityFeatureEXT?
- טופל
- תשובה: לא כל יכולת מרחבית יכולה לתמוך בגבולות מרחביים. דוגמה לכך היא ישות מאגר גלובלית היפותטית שאין לה מיקום מרחבי או גבולות משלה, אלא רק עוזרת לאסוף ולארגן את הישויות האחרות שבתוכה. הערכים של XrSpatialCapabilityFeatureEXT שמופיעים ביכולת עוזרים לאפליקציה לדעת אם יש תמיכה בסינון לפי גבולות מרחביים.
היסטוריית הגרסאות
גרסה 1, 03.05.2025 (Nihav Jain, Google)
- תיאור התוסף הראשוני