XR_ANDROID_spatial_discovery_raycast
Name String
XR_ANDROID_spatial_discovery_raycast
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
787
बदलाव
1
पुष्टि की स्थिति
पुष्टि नहीं की गई
एक्सटेंशन और वर्शन की डिपेंडेंसी
XR_EXT_spatial_entity
पिछली बार बदलाव किए जाने की तारीख
2025-08-12
आईपी स्टेटस
आईपी से जुड़े किसी भी दावे की जानकारी नहीं है.
योगदान देने वाले
ब्रायन चेन, Google
लेवाना चेन, Google
काइल चेन, Google
निहाव जैन, Google
स्पेंसर क्विन, Google
नैटली फ़्लूरी, Meta
युइची तागुची, Meta
जिम्मी अलमपरामबिल, ByteDance
ज़िपेंग लियू, ByteDance
खास जानकारी
यह एक्सटेंशन, XR_EXT_spatial_entity पर आधारित है. साथ ही, यह XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT जैसी मौजूदा स्पेशल सुविधाओं के लिए रेकास्ट की सुविधा देता है, ताकि स्पेशल एंटिटी का पता लगाया जा सके.
इस एक्सटेंशन में, डेप्थ बफ़र के हिसाब से रेकास्टिंग के लिए नई स्पेशल क्षमता भी जोड़ी गई है.
अनुमतियां
Android ऐप्लिकेशन की सुविधाओं के हिसाब से ज़रूरी अनुमतियां. अगर XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID का इस्तेमाल किया जाता है, तो ऐप्लिकेशन के पास android.permission.SCENE_UNDERSTANDING_FINE अनुमति होनी चाहिए. अगर XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT का इस्तेमाल किया जाता है, तो ऐप्लिकेशन के पास android.permission.SCENE_UNDERSTANDING_COARSE अनुमति ज़रूर होनी चाहिए. android.permission.SCENE_UNDERSTANDING_FINE का मतलब यह भी है कि android.permission.SCENE_UNDERSTANDING_COARSE अनुमति दी गई है. अगर ऐप्लिकेशन इन दोनों सुविधाओं का इस्तेमाल करता है, तो उसे दोनों अनुमतियों के लिए अलग-अलग अनुरोध करने की ज़रूरत नहीं है.
android.permission.SCENE_UNDERSTANDING_COARSE और android.permission.SCENE_UNDERSTANDING_FINE, दोनों को खतरनाक अनुमतियां माना जाता है.
(सुरक्षा का लेवल: खतरनाक)
रनटाइम सपोर्ट
अगर रनटाइम, रेकास्टिंग के ज़रिए स्पेस से जुड़ी इकाइयों का पता लगाने की सुविधा देता है, तो उसे ज़रूर यह बताना चाहिए. इसके लिए, उसे xrEnumerateSpatialCapabilityComponentTypesEXT में XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID को गिनना होगा. ऐसा उन सुविधाओं के लिए करना होगा जो रेकास्ट के ज़रिए पता लगाने की सुविधा देती हैं.
अगर रनटाइम, डेप्थ बफ़र के हिसाब से रेकास्टिंग की सुविधा देता है, तो उसे xrEnumerateSpatialCapabilitiesEXT में XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID को ज़रूर शामिल करना चाहिए .
रेकास्टिंग की मदद से, स्पेशल एंटिटी ढूंढना
XrSpatialRaycastInfoANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialRaycastInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrVector3f origin;
XrVector3f direction;
float maxDistance;
} XrSpatialRaycastInfoANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.spaceवह XrSpace है जिसमें XrSpatialRaycastResultDataANDROID की पोज़िशन मौजूद होगी.timeएकXrTimeहै, जिसमें XrSpatialRaycastResultDataANDROID का पोज़ तय किया जाता है.originएक XrVector3f है, जो रे के ऑरिजिन के बारे में बताता है.directionएक XrVector3f है, जो किरण की दिशा के बारे में बताता है.maxDistance, मीटर में वह दूरी है जिसे ऐप्लिकेशन, ज़रूरी नहीं है कि तय करे. इससे,originसे तय की गई दूरी के अंदर मौजूद इकाइयों का पता लगाने की सुविधा को सीमित किया जा सकता है. ऐसाdirectionके साथ किया जाता है.
कोई ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT :: next चेन में XrSpatialRaycastInfoANDROID को शामिल कर सकता है. इससे, ऐसी स्पेशल एंटिटी का पता लगाया जा सकता है जो इस स्ट्रक्चर में तय की गई रे से इंटरसेक्ट करती हैं.
अगर कोई ऐप्लिकेशन, XrSpatialRaycastInfoANDROID का इस्तेमाल ऐसे XrSpatialContextEXT के साथ करता है जिसे किसी भी सुविधा के लिए XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID को चालू किए बिना कॉन्फ़िगर किया गया था, तो रनटाइम को xrCreateSpatialDiscoverySnapshotAsyncEXT या xrCreateSpatialRaycastSnapshotANDROID से XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT ज़रूर दिखाना चाहिए .
रनटाइम में, कॉम्पोनेंट का डेटा और XrSpatialSnapshotEXT में मौजूद सिर्फ़ उन स्पैटियल इकाइयों के आईडी शामिल होने चाहिए जो XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID कॉम्पोनेंट के साथ काम करने वाली सुविधाओं से आते हैं.
अगर कोई ऐप्लिकेशन maxDistance को पॉज़िटिव वैल्यू पर सेट करता है, तो रनटाइम को स्नैपशॉट में ऐसी कोई भी हिट स्पैटियल इकाई शामिल नहीं करनी चाहिए जो direction के साथ-साथ panme:origin से maxDistance से ज़्यादा दूर हो. अगर maxDistance को 0 या नेगेटिव वैल्यू पर सेट किया जाता है, तो रनटाइम को यह मानना ज़रूरी है कि रे की लंबाई तय नहीं है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialRaycastInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
spaceमान्य XrSpace हैंडल होना चाहिए
Raycast Result Component
XrSpatialRaycastResultDataANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialRaycastResultDataANDROID {
XrPosef hitPose;
float distanceSquared;
} XrSpatialRaycastResultDataANDROID;
सदस्यों के बारे में जानकारी
hitPoseएक XrPosef है. यह उस पॉइंट को तय करता है जहां किरण, स्पेशल एंटिटी से मिलती है.distanceSquared, किरण के ऑरिजिन से लेकर इंटरसेक्शन पॉइंट तक की दूरी का वर्ग है.
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID कॉम्पोनेंट, सिर्फ़ xrCreateSpatialDiscoverySnapshotAsyncEXT से बनाए गए XrSpatialSnapshotEXT में मौजूद होगा. इसमें XrSpatialRaycastInfoANDROID, XrSpatialDiscoverySnapshotCreateInfoEXT :: next चेन में शामिल है. इसके अलावा, यह xrCreateSpatialRaycastSnapshotANDROID से बनाए गए XrSpatialSnapshotEXT में भी मौजूद होगा.
रनटाइम को, xrCreateSpatialUpdateSnapshotEXT का इस्तेमाल करके बनाए गए किसी भी XrSpatialSnapshotEXT में इस कॉम्पोनेंट को शामिल नहीं करना चाहिए .
अगर ऐप्लिकेशन में XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID शामिल है, तो रनटाइम को xrCreateSpatialUpdateSnapshotEXT से XR_ERROR_VALIDATION_FAILURE वापस करना होगा .
अगर XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID को सिर्फ़ कुछ सुविधाओं के लिए चालू किया गया है, तो रनटाइम को स्नैपशॉट में सिर्फ़ उन सुविधाओं से मिली जगह की जानकारी वाली इकाइयां शामिल करनी होंगी. उदाहरण के लिए, अगर कोई ऑब्जेक्ट और कोई प्लेन एक ही दिशा में है और XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID सिर्फ़ XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT के लिए चालू है , तो सिर्फ़ प्लेन का पता लगाया जाएगा.
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID का hitPose, XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace में XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time पर मौजूद होगा . पॉज़िटिव Z ऐक्सिस, हिट की गई सतह का नॉर्मल है. साथ ही, नेगेटिव Y ऐक्सिस, रे की शुरुआत की ओर इशारा करता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialRaycastResultDataANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची वाला स्ट्रक्चर
XrSpatialComponentRaycastResultListANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialComponentRaycastResultListANDROID {
XrStructureType type;
void* next;
uint32_t raycastResultCount;
XrSpatialRaycastResultDataANDROID* raycastResults;
} XrSpatialComponentRaycastResultListANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.raycastResultCount,uint32_tहै. यहraycastResultsकलेक्शन में मौजूद एलिमेंट की संख्या के बारे में बताता है.raycastResults, XrSpatialRaycastResultDataANDROID का एक कलेक्शन है .
XrSpatialSnapshotEXT में मौजूद स्पेशल एंटिटी के रेकास्ट नतीजे वाले कॉम्पोनेंट के बारे में क्वेरी करने के लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID शामिल करें. साथ ही, XrSpatialComponentDataQueryResultEXT :: next चेन में XrSpatialComponentRaycastResultListANDROID जोड़ें.
अगर XrSpatialComponentRaycastResultListANDROID, XrSpatialComponentDataQueryResultEXT :: next चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE वापस भेजना ज़रूरी है .
अगर raycastResultCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT ज़रूर लौटाना चाहिए .
लौटाए गए raycastResults क्रम में नहीं हैं. कोई ऐप्लिकेशन, दूरी के हिसाब से नतीजों को क्रम से लगाने के लिए, XrSpatialRaycastResultDataANDROID :: distanceSquared का इस्तेमाल कर सकता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialComponentRaycastResultListANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
raycastResults,raycastResultCountXrSpatialRaycastResultDataANDROID स्ट्रक्चर के ऐरे का पॉइंटर होना चाहिए -
raycastResultCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन
अगर किसी सुविधा के लिए, XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID को XrSpatialCapabilityComponentTypesEXT :: componentTypes में गिना जाता है, तो ऐप्लिकेशन XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में enum वैल्यू शामिल करके, इसे चालू कर सकता है. इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT की अगली चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती .
अगर ऐप्लिकेशन में XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID शामिल है, तो रनटाइम को xrCreateSpatialUpdateSnapshotEXT से XR_ERROR_VALIDATION_FAILURE वापस करना होगा . यह कॉम्पोनेंट, डिस्कवरी स्नैपशॉट के लिए खास तौर पर है.
डेप्थ रेकास्ट की स्पेशियल अबिलिटी
कॉन्फ़िगरेशन
XrSpatialCapabilityConfigurationDepthRaycastANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrSpatialCapabilityConfigurationDepthRaycastANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationDepthRaycastANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.capabilityएक XrSpatialCapabilityEXT है और यहXR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROIDहोना चाहिए .enabledComponentCount,uint32_tहै. यहenabledComponentsकलेक्शन में मौजूद एलिमेंट की संख्या के बारे में बताता है. यह 0 से ज़्यादा होना चाहिए.enabledComponents, XrSpatialComponentTypeEXT के ऐरे का पॉइंटर है .
ऐप्लिकेशन, XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationDepthRaycastANDROID स्ट्रक्चर का पॉइंटर शामिल करके, XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID स्पेशल कैपेबिलिटी चालू कर सकते हैं .
अगर capability, XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE वैल्यू ज़रूर दिखानी चाहिए .
इस सुविधा की मदद से खोजे गए ऑब्जेक्ट का आईडी हमेशा XR_NULL_SPATIAL_ENTITY_ID_EXT होता है . इसका यह भी मतलब है कि ऐप्लिकेशन, इन इकाइयों के लिए XrSpatialEntityEXT हैंडल नहीं बना सकता. इसलिए, इन्हें अपडेट स्नैपशॉट बनाने के लिए XrSpatialUpdateSnapshotCreateInfoEXT :: entities में शामिल नहीं किया जा सकता
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialCapabilityConfigurationDepthRaycastANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
capabilityXrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए -
enabledComponents,enabledComponentCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
enabledComponentCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
गारंटी वाले कॉम्पोनेंट
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID के साथ काम करने वाले रनटाइम को, इस सुविधा से मिली इकाइयों के गारंटीड कॉम्पोनेंट के तौर पर, यहां दिए गए स्पेशल कॉम्पोनेंट के साथ काम करना ज़रूरी है. साथ ही, उन्हें xrEnumerateSpatialCapabilityComponentTypesEXT में शामिल करना ज़रूरी है -
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
सिंक्रोनस रेकास्ट
xrCreateSpatialRaycastSnapshotANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrCreateSpatialRaycastSnapshotANDROID(
XrSpatialContextEXT spatialContext,
const XrSpatialRaycastSnapshotCreateInfoANDROID* createInfo,
XrSpatialSnapshotEXT* snapshot);
पैरामीटर की जानकारी
spatialContextएक XrSpatialContextEXT है, जिसे पहले xrCreateSpatialContextAsyncEXT का इस्तेमाल करके बनाया गया था .createInfo, XrSpatialRaycastSnapshotCreateInfoANDROID का पॉइंटर है .snapshot, XrSpatialSnapshotEXT का पॉइंटर है .
ज़्यादातर इस्तेमाल के मामलों के लिए, xrCreateSpatialDiscoverySnapshotAsyncEXT काफ़ी है. हालांकि, जिन ऐप्लिकेशन को रेकास्ट के नतीजे तुरंत चाहिए उनके लिए यह धीमा है. xrCreateSpatialRaycastSnapshotANDROID, स्नैपशॉट बनाने के लिए सिंक्रोनस रेकास्टिंग शुरू करता है. इससे ऐप्लिकेशन, रेकास्ट के नतीजों के बारे में तुरंत क्वेरी कर सकते हैं.
अगर spatialContext बनाते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs को पास की गई स्पेशल सुविधाओं के लिए, XrSpatialRaycastSnapshotCreateInfoANDROID :: componentTypes में मौजूद XrSpatialComponentTypeEXT में से कोई भी सुविधा चालू नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT वापस भेजना ज़रूरी है .
अगर ऐप्लिकेशन, XrSpatialRaycastSnapshotCreateInfoANDROID :: componentTypes में स्पेस से जुड़े कॉम्पोनेंट टाइप की सूची नहीं देता है, तो रनटाइम को स्नैपशॉट में स्पेस से जुड़ी उन सभी इकाइयों को शामिल करना ज़रूरी है जिनमें कॉम्पोनेंट का वह सेट है जो spatialContext के लिए कॉन्फ़िगर की गई, रेकास्ट की सुविधा के साथ काम करने वाली क्षमताओं के लिए XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents में शामिल हैं . रनटाइम में, spatialContext के लिए कॉन्फ़िगर की गई, रेकास्ट की सुविधा के साथ काम करने वाली सभी चालू सुविधाओं का डेटा शामिल होना चाहिए .
मान्य इस्तेमाल (इंप्लिसिट)
- xrCreateSpatialRaycastSnapshotANDROID को कॉल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है -
spatialContextएक मान्य XrSpatialContextEXT हैंडल होना चाहिए -
createInfomust be a pointer to a valid XrSpatialRaycastSnapshotCreateInfoANDROID structure -
snapshot, XrSpatialSnapshotEXT हैंडल का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpatialRaycastSnapshotCreateInfoANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSpatialRaycastSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
const XrSpatialRaycastInfoANDROID* raycastInfo;
} XrSpatialRaycastSnapshotCreateInfoANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.componentTypeCount,uint32_tहै. यहcomponentTypesकलेक्शन में मौजूद एलिमेंट की संख्या के बारे में बताता है.componentTypes, XrSpatialComponentTypeEXT का एक कलेक्शन है .raycastInfo, XrSpatialRaycastInfoANDROID स्ट्रक्चर है. यह रे की जानकारी देता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSpatialRaycastSnapshotCreateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_spatial_discovery_raycastएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो - अगर
componentTypeCount,0नहीं है, तोcomponentTypes,componentTypeCountमान्य XrSpatialComponentTypeEXT वैल्यू के ऐरे का पॉइंटर होना चाहिए -
raycastInfomust be a pointer to a valid XrSpatialRaycastInfoANDROID structure
कोड का उदाहरण
डेप्थ रेकास्ट और प्लेन ट्रैकिंग की सुविधा कॉन्फ़िगर करना
यहां दिए गए उदाहरण कोड में, रेकास्ट की सुविधा के साथ काम करने वाली क्षमताओं के साथ स्पेशल कॉन्टेक्स्ट बनाने का तरीका बताया गया है. इस उदाहरण के लिए, XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID और XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT का इस्तेमाल किया गया है.
// Check runtime supported capabilities
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID) == capabilities.end()) {
return;
}
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT) == capabilities.end()) {
return;
}
// Create capability config for depth raycasting
std::vector<XrSpatialComponentTypeEXT> depthRaycastComponents {
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
};
// Create capability config for depth raycasting
XrSpatialCapabilityConfigurationDepthRaycastANDROID depthRaycastConfig {
.type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID,
.enabledComponentCount = (uint32_t)depthRaycastComponents.size(),
.enabledComponents = depthRaycastComponents.data(),
};
// Enumerate runtime supported components for plane tracking capability
XrSpatialCapabilityComponentTypesEXT capabilityComponentTypes {
XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
};
bool isRaycastSupportedViaPlaneTracking;
std::vector<XrSpatialComponentTypeEXT> planeTrackingComponents {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId,
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &capabilityComponentTypes));
planeTrackingComponents.resize(capabilityComponentTypes.componentTypeCountOutput);
capabilityComponentTypes.componentTypeCapacityInput = (uint32_t)planeTrackingComponents.size();
capabilityComponentTypes.componentTypes = planeTrackingComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId,
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &capabilityComponentTypes));
// Check if raycast is supported by plane tracking
isRaycastSupportedViaPlaneTracking = std::find(planeTrackingComponents.begin(),
planeTrackingComponents.end(), XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID)
!= planeTrackingComponents.end();
// Create capability config for plane tracking
XrSpatialCapabilityConfigurationPlaneTrackingEXT planeTrackingConfig {
.type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT,
.enabledComponentCount = (uint32_t)planeTrackingComponents.size(),
.enabledComponents = planeTrackingComponents.data(),
};
// Create spatial context
// Types of raycast is determined by configs included in XrSpatialContextCreateInfoEXT
// For this example, both plane raycast & depth raycast are performed
std::vector<const XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<const XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&depthRaycastConfig));
if(isRaycastSupportedViaPlaneTracking) capabilityConfigs.push_back(reinterpret_cast<const XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&planeTrackingConfig));
XrSpatialContextCreateInfoEXT contextCreateInfo {
.type = XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT,
.next = nullptr,
.capabilityConfigCount = (uint32_t)capabilityConfigs.size(),
.capabilityConfigs = capabilityConfigs.data(),
};
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &contextCreateInfo, &future))
// Completes creating spatial context
XrCreateSpatialContextCompletionEXT contextCompletion{
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, future, &contextCompletion))
स्पेशल एंटिटी और क्वेरी कॉम्पोनेंट का डेटा ढूंढना
यहां दिए गए उदाहरण कोड में, XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID और XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT के साथ कॉन्फ़िगर किए गए किसी कॉन्टेक्स्ट के लिए, स्पैटियल एंटिटी ढूंढने और उसके कॉम्पोनेंट डेटा के बारे में क्वेरी करने का तरीका बताया गया है.
// Fill in the raycast info.
XrSpatialRaycastInfoANDROID raycastInfo {
.type = XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID,
.next = nullptr,
.space = viewSpace,
.time = updateTime,
.origin = {0.0f, 0.0f, 0.0f},
.direction = {0.0f, 0.0f,-1.0f},
.maxDistance = 0.0f // ray is unbounded
};
// Next pointing to the raycast info.
XrSpatialDiscoverySnapshotCreateInfoEXT discoverySnapshotCreateInfo {
.type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
.next = &raycastInfo
};
// Create snapshot
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT (
spatialContext, &discoverySnapshotCreateInfo, &future));
waitUntilReady(future);
// Complete async operation.
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
createSnapshotCompletionInfo {
.type = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT,
.baseSpace = viewSpace,
.time = updateTime,
.future = future,
};
XrCreateSpatialDiscoverySnapshotCompletionEXT completion {
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(
spatialContext, &createSnapshotCompletionInfo,
&completion));
if(completion.futureResult != XR_SUCCESS) return;
// Query hit result components
std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
};
XrSpatialComponentDataQueryConditionEXT queryCond {
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT,
.componentTypeCount = 1,
.componentTypes = enabledComponents.data(),
};
XrSpatialComponentDataQueryResultEXT queryResult {
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
};
XrResult result = xrQuerySpatialComponentDataEXT(
completion.snapshot, &queryCond, &queryResult);
// Check query result.
if(result != XR_SUCCESS) return;
// Query again for the hit result list.
std::vector<XrSpatialRaycastResultDataANDROID> raycastResults;
raycastResults.resize(queryResult.entityIdCountOutput);
XrSpatialComponentRaycastResultListANDROID raycastResultList {
.type = XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID,
.raycastResultCount = (uint32_t)raycastResults.size(),
.raycastResults = raycastResults.data(),
};
queryResult.next = &raycastResultList;
result = xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult);
// Check query result again.
if(result != XR_SUCCESS) return;
std::vector<XrSpatialEntityEXT> hitEntities;
std::vector<XrPosef> depthHitPoses;
for(uint32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// access raycastResults[i] for id & pose
XrSpatialEntityIdEXT id = queryResult.entityIds[i];
XrPosef pose = raycastResults[i].hitPose;
if (id != XR_NULL_SPATIAL_ENTITY_ID_EXT) {
// hit entities (e.g. planes)
// get entity handle via entity id
XrSpatialEntityFromIdCreateInfoEXT entityCreateInfo {
.type = XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT,
.entityId = id,
};
XrSpatialEntityEXT entity = XR_NULL_HANDLE;
xrCreateSpatialEntityFromIdEXT(spatialContext, &entityCreateInfo, &entity);
hitEntities.push_back(entity);
} else {
// hit depth
depthHitPoses.push_back(pose);
}
}
// Cleanup
xrDestroySpatialSnapshotEXT(completion.snapshot);
Raycast स्नैपशॉट बनाएं
यहां दिए गए उदाहरण कोड में, सिंक्रोनस रेकास्ट स्नैपशॉट बनाने का तरीका बताया गया है.
// fill in create info
XrSpatialRaycastSnapshotCreateInfoANDROID createInfo {
.type = XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID,
.componentTypeCount = 0, // include all hit spatial entities
.componentTypes = nullptr,
.raycastInfo = &raycastInfo
};
// create raycast snapshot
XrSpatialSnapshotEXT raycastSnapshot = XR_NULL_HANDLE;
CHK_XR(xrCreateSpatialRaycastSnapshotANDROID(
spatialContext, &createInfo, &raycastSnapshot));
// ...
// query component data as previous example
// ...
// Cleanup
xrDestroySpatialSnapshotEXT(raycastSnapshot);
नए निर्देश
नई संरचनाएं
- XrSpatialCapabilityConfigurationDepthRaycastANDROID
- XrSpatialRaycastResultDataANDROID
- XrSpatialRaycastSnapshotCreateInfoANDROID
XrSpatialComponentDataQueryResultEXT की अवधि बढ़ाई जा रही है :
XrSpatialDiscoverySnapshotCreateInfoEXT को बढ़ाना :
नए Enum कॉन्सटेंट
XR_ANDROID_SPATIAL_DISCOVERY_RAYCAST_EXTENSION_NAMEXR_ANDROID_spatial_discovery_raycast_SPEC_VERSIONXrSpatialCapabilityEXT को बढ़ाना :
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
XrSpatialComponentTypeEXT को बढ़ाना :
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
XrStructureType को बढ़ाना :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROIDXR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROIDXR_TYPE_SPATIAL_RAYCAST_INFO_ANDROIDXR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID
समस्याएं
वर्शन हिस्ट्री
पहला संशोधन, 15-07-2025 (ब्रायन चेन)
- एक्सटेंशन का शुरुआती ब्यौरा.