Name String
XR_ANDROID_raycast
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
464
बदलाव
1
एक्सटेंशन और वर्शन की डिपेंडेंसी
पिछली बार बदलाव करने की तारीख
2024-10-02
आईपी का स्टेटस
आईपी पर कोई दावा नहीं किया गया है.
योगदान देने वाले
स्पेंसर क्विन, Google
निहाव जैन, Google
जॉन पर्सी, Google
जेरेड फ़ाइंडर, Google
लेवाना चेन, Google
केनी वर्कमेयर, Google
खास जानकारी
इस एक्सटेंशन की मदद से, ऐप्लिकेशन आस-पास मौजूद ट्रैक किए जा सकने वाले आइटम के लिए रेकास्ट कर सकता है. रेकास्ट, ऐसे ऑब्जेक्ट का पता लगाने में मददगार हो सकते हैं जिनसे किरणें टकराती हैं. उदाहरण के लिए:
- यह तय करने के लिए कि किसी तैरते हुए ऑब्जेक्ट को छोड़ने पर वह कहां गिरेगा, वर्टिकल रेकास्ट का इस्तेमाल करें.
- फ़ोरवर्ड-फ़ेसिंग रेकास्ट का इस्तेमाल करके, यह पता लगाने के लिए कि उपयोगकर्ता कहां देख रहा है.
रेकास्ट की सुविधाओं के बारे में क्वेरी
xrEnumerateRaycastSupportedTrackableTypesANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
पैरामीटर की जानकारी
instanceवह XrInstance है जिससेsystemIdको वापस पाया गया था.systemIdवहXrSystemIdहै जिसके लिए रेकास्टिंग के लिए, ट्रैक किए जा सकने वाले टाइप की जानकारी दी जा रही है.trackableTypeCapacityInput,trackableTypesकी क्षमता है या ज़रूरी क्षमता पाने के लिए 0 डालें.trackableTypeCountOutput, कलेक्शन में मौजूद आइटम की संख्या का पॉइंटर होता है. अगरtrackableTypeCapacityInputकी वैल्यू कम है, तो यह ज़रूरी क्षमता का पॉइंटर होता है.trackableTypes, XrTrackableTypeANDROID के कलेक्शन का पॉइंटर है. हालांकि, अगरtrackableTypeCapacityInput0है, तोtrackableTypesNULLहो सकता है.
- ज़रूरी
trackableTypesसाइज़ को वापस पाने के बारे में पूरी जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
xrEnumerateRaycastSupportedTrackableTypesANDROID, ट्रैक किए जा सकने वाले उन टाइप की सूची बनाता है जो मौजूदा सेशन के हिसाब से रेकास्टिंग की सुविधा के साथ काम करते हैं.
मान्य इस्तेमाल (इंप्लिसिट)
- xrEnumerateRaycastSupportedTrackableTypesANDROID को कॉल करने से पहले,
XR_ANDROID_raycastएक्सटेंशन चालू होना चाहिए instanceयह एक मान्य XrInstance हैंडल होना चाहिएtrackableTypeCountOutput,uint32_tवैल्यू का पॉइंटर होना चाहिए- अगर
trackableTypeCapacityInput,0नहीं है, तोtrackableTypesXrTrackableTypeANDROID वैल्यू के ऐरे का पॉइंटर होना चाहिएtrackableTypeCapacityInput
रिटर्न कोड
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
रेकास्ट करना
xrRaycastANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
पैरामीटर की जानकारी
sessionवह XrSession है जो रेकास्ट करता है.rayInfo, XrRaycastInfoANDROID है, जो कि रे को कास्ट करने के बारे में बताता है.results, XrRaycastHitResultsANDROID का पॉइंटर है, जो रेकास्ट के नतीजे पाता है.
ऐप्लिकेशन, xrRaycastANDROID को कॉल करके रेकास्ट कर सकता है.
- अगर कोई रेकास्ट, XrRaycastHitResultsANDROID::maxResults से ज़्यादा ट्रैक किए जा सकने वाले ऑब्जेक्ट से इंटरसेक्शन करता है, तो रनटाइम को रे के XrRaycastHitResultsANDROID::origin के सबसे नज़दीक के हिट नतीजे दिखाने चाहिए.
- अगर कोई रेकास्ट,
XR_TRACKABLE_TYPE_ANDROID_PLANEटाइप के किसी ऐसे ट्रैक किए जा सकने वाले ऑब्जेक्ट से इंटरसेक्शन करता है जिसे किसी दूसरे प्लेन ने अपने अंदर शामिल कर लिया है, तो रनटाइम को सिर्फ़ उस प्लेन के लिए हिट का नतीजा दिखाना चाहिए. - रनटाइम को ज़रूर, हिट के नतीजों को XrRaycastInfoANDROID::trajectory वेक्टर के साथ, XrRaycastInfoANDROID::origin से सबसे नज़दीक से सबसे दूर के क्रम में दिखाना चाहिए.
- अगर XrRaycastInfoANDROID::trackers में मौजूद XrTrackableTrackerANDROID हैंडल से जुड़े ट्रैक किए जा सकने वाले टाइप की गिनती, xrEnumerateRaycastSupportedTrackableTypesANDROID से नहीं की जाती है, तो रनटाइम को
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDदिखाना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrRaycastANDROID को कॉल करने से पहले,
XR_ANDROID_raycastएक्सटेंशन चालू होना चाहिए sessionयह एक मान्य XrSession हैंडल होना चाहिएrayInfoयह किसी मान्य XrRaycastInfoANDROID स्ट्रक्चर का पॉइंटर होना चाहिएresultsXrRaycastHitResultsANDROID स्ट्रक्चर का पॉइंटर होना ज़रूरी है
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_POSE_INVALIDXR_ERROR_TIME_INVALIDXR_ERROR_FEATURE_UNSUPPORTED
XrRaycastInfoANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrRaycastInfoANDROID {
XrStructureType type;
void* next;
uint32_t maxResults;
uint32_t trackerCount;
const XrTrackableTrackerANDROID* trackers;
XrVector3f origin;
XrVector3f trajectory;
XrSpace space;
XrTime time;
} XrRaycastInfoANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.maxResults,uint32_tसे ज़्यादा नतीजे नहीं दिखाए जा सकते.trackerCount,trackersकलेक्शन में मौजूदuint32_tकी संख्या है.trackers, XrTrackableTrackerANDROID का कलेक्शन है. इसकी मदद से, कास्ट की गई रे का जांच की जानी चाहिए.originवह XrVector3f है जिससे किरण को कास्ट किया जाता है.trajectoryवह XrVector3f है जिस पर किरण को टारगेट किया गया है.spaceवह XrSpace है जिसमें किरण को डाला जाता है.timeवहXrTimeहै जिस पर किरण डाली जाती है.
XrRaycastInfoANDROID स्ट्रक्चर से, रे को कास्ट करने के बारे में पता चलता है.
- XrRaycastInfoANDROID::trackers कलेक्शन में, अलग-अलग तरह के ट्रैकर हो सकते हैं.
- XrRaycastInfoANDROID::trackers कलेक्शन में, एक ही तरह के कई ट्रैकर न होने चाहिए. ऐसा न होने पर, रनटाइम
XR_ERROR_VALIDATION_FAILUREदिखाएगा.
मान्य इस्तेमाल (इंप्लिसिट)
- XrRaycastInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_raycastएक्सटेंशन को चालू करना ज़रूरी है typeहोनी चाहिएXR_TYPE_RAYCAST_INFO_ANDROIDnextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिएtrackersकोtrackerCountमान्य XrTrackableTrackerANDROID हैंडल के कलेक्शन का पॉइंटर होना चाहिएspaceयह XrSpace का मान्य हैंडल होना चाहिएtrackerCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिएspaceऔरtrackersके एलिमेंट, दोनों को एक ही XrSession से बनाया, ऐलोकेट किया गया हो या फिर उन्हें उसी से वापस पाया गया हो
XrRaycastHitResultsANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.resultsCapacityInput,resultsकलेक्शन की क्षमता है या ज़रूरी क्षमता पाने के अनुरोध के लिए 0.resultsCountOutput, लिखे गएresultsकी संख्या का पॉइंटर है. इसके अलावा, अगरresultsCapacityInputकी संख्या काफ़ी नहीं है, तोresultsCountOutputज़रूरी क्षमता का पॉइंटर है.results, XrRaycastHitResultANDROID स्ट्रक्चर के कलेक्शन का पॉइंटर है. अगरresultsCapacityInput0 है, तो यहNULLहो सकता है.- ज़रूरी
resultsसाइज़ को वापस पाने के बारे में पूरी जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
XrRaycastHitResultsANDROID में, रेकास्ट के हिट की सूची होती है.
रनटाइम को resultsCountOutput को XrRaycastInfoANDROID::maxResults से कम या उसके बराबर पर सेट करना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrRaycastHitResultsANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_raycastएक्सटेंशन को चालू करना ज़रूरी है typeहोनी चाहिएXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिएresultsXrRaycastHitResultANDROID-आधारित स्ट्रक्चर के ऐरे का पॉइंटर होना चाहिएresultsCapacityInputresultsCapacityInputपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrRaycastHitResultANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type, ट्रैक किए जा सकने वाले उस आइटम का XrTrackableTypeANDROID है जिस पर रेकास्ट की गई किरणें पड़ती हैं.trackableवहXrTrackableANDROIDहै जिस पर रेकास्ट हिट हुआ था याXR_NULL_TRACKABLE_ANDROIDअगर ट्रैक किया जा सकने वालाtypeXR_TRACKABLE_TYPE_DEPTH_ANDROIDथा.poseवह XrPosef है जिस पर रेकास्ट हिट हुआ.
XrRaycastHitResultANDROID में, रेकास्ट हिट की जानकारी होती है.
प्लेन से टकराने पर, XrRaycastHitResultANDROID::pose का ऐसा होना ज़रूरी है कि X और Z, प्लेन के समानांतर हों और Y ऐक्सिस, प्लेन के लिए सामान्य हो.
ट्रैक किए जा सकने वाले हिट का टाइप |
ब्यौरा |
|
किसी पॉइंट की सही गहराई और ओरिएंटेशन का पता लगाने के लिए, हॉरिज़ॉन्टल और/या वर्टिकल सतहों को हिट करता है. |
|
किसी पॉइंट की सही गहराई और ओरिएंटेशन का पता लगाने के लिए, पूरे सीन की गहराई की जानकारी का इस्तेमाल करता है. |
मान्य इस्तेमाल (इंप्लिसिट)
- XrRaycastHitResultANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_raycastएक्सटेंशन को चालू करना ज़रूरी है typeकी वैल्यू, XrTrackableTypeANDROID की मान्य वैल्यू होनी चाहिए
रेकास्टिंग के लिए कोड का उदाहरण
यहां दिए गए उदाहरण में, रेकास्ट करने का तरीका बताया गया है.
XrSession session; // previously initialized
XrTime updateTime; // previously initialized
XrSpace appSpace; // space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrPosef headPose; // latest pose of the HMD.
XrTrackableTrackerANDROID planeTracker; // tracker for plane trackables.
XrTrackableTrackerANDROID depthTracker; // tracker for depth trackables.
// Perform a raycast against multiple trackers.
XrTrackableTrackerANDROID trackers[] = {
&planeTracker,
&depthTracker,
};
XrRaycastInfoANDROID rayInfo = {XR_TYPE_RAYCAST_INFO_ANDROID};
rayInfo.trackerCount = sizeof(trackers) / sizeof(XrTrackableTrackerANDROID);
rayInfo.trackers = trackers;
rayInfo.origin = headPose.position;
rayInfo.trajectory = CalculateForwardDirectionFromHeadPose(headPose);
rayInfo.space = appSpace;
rayInfo.time = updateTime;
uint32_t totalHitResults = 0;
constexpr uint32 NUM_DESIRED_RESULTS = 2;
XrRaycastHitResultANDROID hitResult[NUM_DESIRED_RESULTS];
XrRaycastHitResultsANDROID hitResults = {XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID};
hitResults.maxResults = NUM_DESIRED_RESULTS;
hitResults.resultsCapacityInput = NUM_DESIRED_RESULTS;
hitResults.results = hitResult;
XrResult result = xrRaycastANDROID(session, &rayInfo, &hitResults);
if (result == XR_SUCCESS && hitResults.resultsCountOutput >= 1) {
// Hit results are returned in closest-to-farthest order in
// hitResults.results[0] .. hitResults.results[hitResults.resultsCountOutput - 1]
}
नई Enum Constant
XrStructureType एनोटेशन को इनके साथ जोड़ा गया है:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
नए स्ट्रक्चर
नए फ़ंक्शन
समस्याएं
वर्शन का इतिहास
- पहला बदलाव, 02-10-2024 (केनी वर्कमेयर)
- एक्सटेंशन के बारे में शुरुआती जानकारी
OpenXR™ और OpenXR लोगो, The Khronos Group Inc. के मालिकाना हक वाले ट्रेडमार्क हैं. ये चीन, यूरोपीय संघ, जापान, और यूनाइटेड किंगडम में ट्रेडमार्क के तौर पर रजिस्टर किए गए हैं.