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 בשרשרת הבאה.

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

המבנה של 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 בשרשרת הבאה.

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

המבנה של 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 בשרשרת הבאה.

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

דוגמה

הקוד הבא מדגים איך להשתמש בגבולות מרחביים כדי לסנן את הגילוי של ישויות מרחביות.

// 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));

מבנים חדשים

קבועי Enum חדשים

  • XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAME
  • XR_ANDROID_spatial_discovery_bounds_SPEC_VERSION
  • הרחבה של XrSpatialCapabilityFeatureEXT :

    • XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
  • הרחבה של XrStructureType :

    • XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID
    • XR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID
    • XR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID

בעיות

  • למה התמיכה בגבולות מרחביים תלויה בהגדרה של XrSpatialCapabilityFeatureEXT?

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

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

  • גרסה 1, 03.05.2025 (Nihav Jain, Google)

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