XR_ANDROID_spatial_discovery_bounds

Name String

XR_ANDROID_spatial_discovery_bounds

एक्सटेंशन का टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

762

बदलाव

1

पुष्टि की स्थिति

मंज़ूरी नहीं मिली

एक्सटेंशन और वर्शन डिपेंडेंसी

XR_EXT_spatial_entity

योगदान देने वाले

निहाव जैन, Google
नैटली फ़्ल्यूरी, Meta
यूइची तागुची, Meta
यिन ली, Microsoft
रॉन बेसेम्स, Meta
कार्तिक कडाप्पन, Magic Leap
जिमी आलमपरमबिल, ByteDance
ज़ीपेंग लियू, ByteDance
जून यान, 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 से बाहर हों.

यह ध्यान रखना ज़रूरी है कि XrSpatialDiscoverySnapshotCreateInfoEXT की अगली चेन में XrSpatialBoundsSpherefANDROID को शामिल करने पर, यह अन्य फ़िल्टर के साथ '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 से बाहर हों.

यह ध्यान रखना ज़रूरी है कि XrSpatialDiscoverySnapshotCreateInfoEXT की अगली चेन में XrSpatialBoundsBoxfANDROID को शामिल करने से, यह उपलब्ध कराए गए अन्य फ़िल्टर के साथ '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 से बाहर हों.

यह ध्यान रखना ज़रूरी है कि XrSpatialDiscoverySnapshotCreateInfoEXT की अगली चेन में XrSpatialBoundsFrustumfANDROID को शामिल करने से, यह उपलब्ध कराए गए अन्य फ़िल्टर के साथ '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 (निहाव जैन, Google)

    • एक्सटेंशन का शुरुआती ब्यौरा