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 स्ट्रक्चर के सिर्फ़ पहले इंस्टेंस को प्रोसेस करेगा.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialBoundsSpherefANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_boundsएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROIDहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
spaceXrSpace हैंडल मान्य होना चाहिए
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 स्ट्रक्चर के सिर्फ़ पहले इंस्टेंस को प्रोसेस करेगा.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialBoundsBoxfANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_boundsएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
spaceXrSpace हैंडल मान्य होना चाहिए
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 स्ट्रक्चर के सिर्फ़ पहले इंस्टेंस को प्रोसेस करेगा.
सही इस्तेमाल (इंप्लिसिट)
- XrSpatialBoundsFrustumfANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_boundsएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
spaceXrSpace हैंडल मान्य होना चाहिए
उदाहरण
यहां दिए गए कोड से पता चलता है कि स्पेसियल बाउंड का इस्तेमाल करके, स्पेसियल इकाइयों को कैसे फ़िल्टर किया जाता है.
// 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_VERSIONXrSpatialCapabilityFeatureEXT को एक्सटेंड करना :
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 (निहाव जैन, Google)
- एक्सटेंशन का शुरुआती ब्यौरा