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 के कलेक्शन का पॉइंटर है. हालांकि, अगरtrackableTypeCapacityInput
0
है, तोtrackableTypes
NULL
हो सकता है.
- ज़रूरी
trackableTypes
साइज़ को वापस पाने के बारे में पूरी जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
xrEnumerateRaycastSupportedTrackableTypesANDROID, ट्रैक किए जा सकने वाले उन टाइप की सूची बनाता है जो मौजूदा सेशन के हिसाब से रेकास्टिंग की सुविधा के साथ काम करते हैं.
मान्य इस्तेमाल (इंप्लिसिट)
- xrEnumerateRaycastSupportedTrackableTypesANDROID को कॉल करने से पहले,
XR_ANDROID_raycast
एक्सटेंशन चालू होना चाहिए instance
यह एक मान्य XrInstance हैंडल होना चाहिएtrackableTypeCountOutput
,uint32_t
वैल्यू का पॉइंटर होना चाहिए- अगर
trackableTypeCapacityInput
,0
नहीं है, तोtrackableTypes
trackableTypeCapacityInput
XrTrackableTypeANDROID वैल्यू के ऐरे का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SIZE_INSUFFICIENT
XR_ERROR_SYSTEM_INVALID
XR_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::origin से लेकर XrRaycastInfoANDROID::trajectory वेक्टर के साथ, सबसे नज़दीक से सबसे दूर के क्रम में दिखाना चाहिए.
- अगर XrRaycastInfoANDROID::trackers में मौजूद XrTrackableTrackerANDROID हैंडल से जुड़े ट्रैक किए जा सकने वाले टाइप की जानकारी, xrEnumerateRaycastSupportedTrackableTypesANDROID से नहीं दी जाती है, तो रनटाइम को
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
देना चाहिए.
मान्य इस्तेमाल (इंप्लिसिट)
- xrRaycastANDROID को कॉल करने से पहले,
XR_ANDROID_raycast
एक्सटेंशन चालू होना चाहिए session
यह एक मान्य XrSession हैंडल होना चाहिएrayInfo
यह किसी मान्य XrRaycastInfoANDROID स्ट्रक्चर का पॉइंटर होना चाहिएresults
XrRaycastHitResultsANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_POSE_INVALID
XR_ERROR_TIME_INVALID
XR_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_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए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 स्ट्रक्चर के ऐरे का पॉइंटर है. अगरresultsCapacityInput
0 है, तो यहNULL
हो सकता है.- ज़रूरी
results
साइज़ को वापस पाने के बारे में पूरी जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
XrRaycastHitResultsANDROID में, रेकास्ट के हिट की सूची होती है.
रनटाइम को resultsCountOutput
को XrRaycastInfoANDROID::maxResults से कम या उसके बराबर पर सेट करना ज़रूरी है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrRaycastHitResultsANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_raycast
एक्सटेंशन को चालू करना ज़रूरी है type
होनी चाहिएXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
next
NULL
या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिएresults
XrRaycastHitResultANDROID-आधारित स्ट्रक्चर के ऐरे का पॉइंटर होना चाहिएresultsCapacityInput
resultsCapacityInput
पैरामीटर की वैल्यू,0
से ज़्यादा होनी चाहिए
XrRaycastHitResultANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
पैसे चुकाकर बने सदस्यों के ब्यौरे
type
, ट्रैक किए जा सकने वाले उस आइटम का XrTrackableTypeANDROID है जिस पर रेकास्ट की गई किरणें पड़ती हैं.trackable
वहXrTrackableANDROID
है जिस पर रेकास्ट हिट हुआ था याXR_NULL_TRACKABLE_ANDROID
अगर ट्रैक किया जा सकने वालाtype
XR_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_ANDROID
XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
नए स्ट्रक्चर
नए फ़ंक्शन
समस्याएं
वर्शन का इतिहास
- पहला बदलाव, 02-10-2024 (केनी वर्कमेयर)
- एक्सटेंशन के बारे में शुरुआती जानकारी