מחרוזת שם
XR_ANDROID_raycast
סוג התוסף
תוסף למכונה
מספר תוסף רשום
464
גרסה
1
תלות בתוספים ובגרסאות
תאריך השינוי האחרון
2024-10-02
סטטוס כתובת ה-IP
לא ידוע על תלונות על הפרת זכויות יוצרים בנושא כתובת IP.
שותפים ביצירת התוכן
ספנסר קווין (Spencer Quin), Google
Nihav Jain, Google
ג'ון פורסי (John Pursey), Google
Jared Finder, Google
לבנה צ'ן, Google
Kenny Vercaemer, Google
סקירה כללית
התוסף הזה מאפשר לאפליקציה לבצע הקרנות של קרניים על סמך פריטים שניתנים למעקב בסביבה. אפשר להשתמש ב-Raycasts כדי לזהות אובייקטים בסביבה שרקר יעבור דרכם. לדוגמה:
- כדי לקבוע לאן יפול אובייקט צף כשמשחררים אותו, באמצעות יצירת קרן אנכית.
- כדי לקבוע לאן המשתמש מביט, באמצעות קרן קדימה.
יכולות של raycast שנתמכות בשאילתות
הפונקציה 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, אבל יכול להיותNULLאם הערך שלtrackableTypeCapacityInputהוא0.
- בקטע פרמטרים של גודל מאגר מפורט תיאור של אחזור הגודל הנדרש של
trackableTypes.
הפונקציה xrEnumerateRaycastSupportedTrackableTypesANDROID מפרטת את סוגי העצמים שניתן לעקוב אחריהם שתומכים ב-raycasting בסשן הנוכחי.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_raycastלפני שמפעילים את xrEnumerateRaycastSupportedTrackableTypesANDROID instanceחייב להיות מזהה XrInstance חוקיtrackableTypeCountOutputחייב להיות הפניה לערךuint32_t- אם הערך של
trackableTypeCapacityInputהוא לא0, הערך שלtrackableTypesחייב להיות הפניה למערך של ערכים מסוגtrackableTypeCapacityInputXrTrackableTypeANDROID
קודי החזרה
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
ביצוע raycast
הפונקציה xrRaycastANDROID מוגדרת כך:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
תיאורי פרמטרים
sessionהוא XrSession שמבצע את ה-raycast.rayInfoהוא XrRaycastInfoANDROID שמתאר את קרן האור שרוצים להקרין.resultsהוא הפניה ל-XrRaycastHitResultsANDROID שמקבל את התוצאות של ה-raycast.
האפליקציה יכולה לבצע הקרנות קרן על ידי קריאה ל-xrRaycastANDROID.
- אם קרן לייזר חוצה יותר אובייקטים שניתן לעקוב אחריהם מאשר XrRaycastHitResultsANDROID::maxResults, סביבת זמן הריצה חייבת להחזיר את תוצאות ההיט הכי קרובות ל-XrRaycastHitResultsANDROID::origin של הקרן.
- אם קרן לייזר חוצה אובייקט שניתן למעקב מסוג
XR_TRACKABLE_TYPE_ANDROID_PLANE, שמשויך למטוס אחר, סביבת זמן הריצה חייבת להחזיר את תוצאת ההיט של המטוס המכיל בלבד. - סביבת זמן הריצה חייבת להחזיר את תוצאות ההיטים בסדר הקרוב ביותר לרחוק ביותר מ-XrRaycastInfoANDROID::origin לאורך הווקטור XrRaycastInfoANDROID::trajectory.
- סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDאם הסוג שניתן למעקב שתואם למזהי XrTrackableTrackerANDROID ב-XrRaycastInfoANDROID::trackers לא מופיע ברשימה של xrEnumerateRaycastSupportedTrackableTypesANDROID.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_raycastלפני שמפעילים את xrRaycastANDROID sessionחייב להיות מזהה XrSession תקיןrayInfoחייב להיות הפניה למבנה XrRaycastInfoANDROID תקיןresultsחייב להיות הפניה למבנה XrRaycastHitResultsANDROID
קודי החזרה
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הוא ספירתuint32_tשל מערךtrackers.trackersהוא המערך של XrTrackableTrackerANDROID שאליו צריך לבדוק את קרן האור שהוטמנה.originהוא XrVector3f שממנו מוקרן הקרן.trajectoryהוא XrVector3f שאליו מכוון הקרן.spaceהוא מרחב XR שבו קרן האור מושלכת.timeהוא ה-XrTimeשאליו מופנה הקרן.
המבנה XrRaycastInfoANDROID מתאר את קרן האור שרוצים להקרין.
- המערך XrRaycastInfoANDROID::trackers עשוי להכיל מכשירי מעקב מסוגים שונים.
- מערך XrRaycastInfoANDROID::trackers אסור לכלול מספר מכשירי מעקב מאותו סוג, אחרת סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_VALIDATION_FAILURE.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_raycastלפני שמשתמשים ב-XrRaycastInfoANDROID. - הערך של
typeחייב להיותXR_TYPE_RAYCAST_INFO_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבניםtrackersחייב להיות הפניה למערך שלtrackerCountכינויים חוקיים של XrTrackableTrackerANDROIDspaceחייב להיות כינוי חוקי ב-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לא מספיקה.resultsהוא הפניה למערך של מבנים מסוג XrRaycastHitResultANDROID. הערך יכול להיותNULLאם הערך שלresultsCapacityInputהוא 0.- בקטע פרמטרים של גודל מאגר מפורט תיאור של אחזור הגודל הנדרש של
results.
המאפיין XrRaycastHitResultsANDROID מכיל את מערך ההיטים של קרן לייזר.
סביבת זמן הריצה חייבת להגדיר את resultsCountOutput כך שיהיה קטן מ-XrRaycastInfoANDROID::maxResults או שווה לו.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_raycastלפני שמשתמשים ב-XrRaycastHitResultsANDROID - הערך של
typeחייב להיותXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבניםresultsחייב להיות מצביע למערך של מבנים מסוגresultsCapacityInputXrRaycastHitResultANDROID-based- הפרמטר
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 שאליו פגע קרן ה-raycast.
המאפיין XrRaycastHitResultANDROID מכיל את הפרטים של היטים של raycast.
הערך של XrRaycastHitResultANDROID::pose עבור פגיעה במישור חייב להיות כזה ש-X ו-Z מקבילים למישור, וציר Y ניצב למישור.
סוג ההיט שניתן לעקוב אחריו |
תיאור |
|
מכה במשטחים אופקיים ו/או אנכיים כדי לקבוע את העומק והכיוון הנכונים של נקודה. |
|
המערכת משתמשת בנתוני עומק מכל הסצנה כדי לקבוע את העומק והכיוון הנכונים של נקודה. |
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_raycastלפני שמשתמשים ב-XrRaycastHitResultANDROID typeחייב להיות ערך תקין של XrTrackableTypeANDROID
קוד לדוגמה ל-raycasting
קוד הדוגמה הבא מראה איך לבצע הקרנות קרן.
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
המניין XrStructureType הורחב עם:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
מבנים חדשים
פונקציות חדשות
בעיות
היסטוריית הגרסאות
- גרסה 1, 2024-10-02 (Kenny Vercaemer)
- תיאור ראשוני של התוסף
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc., והם רשומים כסימנים מסחריים בסין, באיחוד האירופי, ביפן ובבריטניה.