XR_ANDROID_avatar_eyes OpenXR एक्सटेंशन

Name String

XR_ANDROID_avatar_eyes

एक्सटेंशन टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

457

बदलाव

1

एक्सटेंशन और वर्शन की डिपेंडेंसी

OpenXR 1.0

पिछली बार बदलाव करने की तारीख

2024-09-30

आईपी स्टेटस

आईपी पर कोई दावा नहीं किया गया है.

योगदान देने वाले

स्पेंसर क्विन, Google

जेरेड फ़ाइंडर, Google

लेवाना चेन, Google

खास जानकारी

इस एक्सटेंशन की मदद से, ऐप्लिकेशन उपयोगकर्ता की आंखों की स्थिति और ओरिएंटेशन के साथ-साथ, आंखों को ट्रैक करने की स्थिति का पता लगा सकते हैं.

इस एक्सटेंशन का मकसद, अवतारों की आंखों की पोज़िशन और स्थिति को ज़्यादा असली दिखाना है. इसके लिए:

  • इससे, ट्रैक नहीं की गई स्थितियों को भी ट्रैक किया जा सकता है. जैसे, झपकना.
  • इससे, एक आँख या दोनों आँखों से ट्रैकिंग की जा सकती है.

इस एक्सटेंशन का इस्तेमाल, आंखों की गति को ट्रैक करने के दूसरे कामों के लिए नहीं किया जाना चाहिए. इंटरैक्शन के लिए, XR_EXT_eye_gaze_interaction का इस्तेमाल किया जाना चाहिए.

आई ट्रैकर

आइ ट्रैकर एक सेंसिंग डिवाइस है, जो आंखों को ट्रैक करता है और यह सटीक तौर पर मैप करता है कि उपयोगकर्ता कहां देख रहा है. इस एक्सटेंशन का मुख्य मकसद, वर्चुअल सीन में उपयोगकर्ता की नज़र को उनके अवतार पर मैप करना है.

आंखों की गतिविधियों को ट्रैक करने से जुड़ा डेटा, संवेदनशील निजी जानकारी हो सकती है. साथ ही, यह निजी निजता और भरोसे से जुड़ा होता है. हमारा सुझाव है कि जिन ऐप्लिकेशन में आंखों की गतिविधियों को ट्रैक करने वाला डेटा सेव या ट्रांसफ़र किया जाता है वे हमेशा उपयोगकर्ता से इसकी अनुमति लें.

  • ऐक्टिव आई ट्रैकर बनाने की कोशिश करने पर, ऐप्लिकेशन को XR_ERROR_PERMISSION_INSUFFICIENT मिलेगा. ऐसा तब तक होगा, जब तक ऐप्लिकेशन को आई ट्रैकर का ऐक्सेस नहीं मिल जाता.

सिस्टम की क्षमता की जांच करना

कोई ऐप्लिकेशन, xrGetSystemProperties को कॉल करते समय, XrSystemAvatarEyesPropertiesANDROID स्ट्रक्चर को XrSystemProperties से जोड़कर, यह जांच कर सकता है कि सिस्टम में अवतार की आंखें काम करती हैं या नहीं. अगर supportsAvatarEyes, XR_FALSE दिखाता है, तो ऐप्लिकेशन को xrCreateEyeTrackerANDROID से XR_ERROR_FEATURE_UNSUPPORTED मिलेगा.

typedef struct XrSystemAvatarEyesPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsAvatarEyes;
} XrSystemAvatarEyesPropertiesANDROID;

पैसे चुकाकर बने सदस्यों के ब्यौरे

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.
  • supportsAvatarEyes एक XrBool32 है, जो यह दिखाता है कि मौजूदा सिस्टम में अवतार की आंखें दिखती हैं या नहीं.

मान्य इस्तेमाल (इंप्लिसिट)

आइ ट्रैकर हैंडल बनाना

XR_DEFINE_HANDLE(XrEyeTrackerANDROID)

XrEyeTrackerANDROID हैंडल, आंखों को ट्रैक करने के लिए एक ऐप्लिकेशन है. इससे यह पता चलता है कि उपयोगकर्ता किस चीज़ को देख रहा है.

इस एक्सटेंशन के अन्य फ़ंक्शन का इस्तेमाल करके, आंखों की गति को ट्रैक करने से जुड़ा डेटा ऐक्सेस करने के लिए, इस हैंडल का इस्तेमाल किया जा सकता है.

आई ट्रैकिंग की मदद से, सीन में आंखों की पोज़िशन और स्थिति का पता चलता है.

xrCreateEyeTrackerANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:

XrResult xrCreateEyeTrackerANDROID(
    XrSession                                   session,
    const XrEyeTrackerCreateInfoANDROID*        createInfo,
    XrEyeTrackerANDROID*                        eyeTracker);

पैरामीटर की जानकारी

  • session एक XrSession हैंडल है, जिसमें आंखों की गति को ट्रैक करने की सुविधा चालू होगी.
  • createInfo, XrEyeTrackerCreateInfoANDROID है. इसका इस्तेमाल, आंखों की ट्रैकिंग की जानकारी देने के लिए किया जाता है.
  • eyeTracker, XrEyeTrackerANDROID हैंडल है.

कोई ऐप्लिकेशन, xrCreateEyeTrackerANDROID फ़ंक्शन का इस्तेमाल करके, XrEyeTrackerANDROID हैंडल बना सकता है.

अगर सिस्टम में आंखों की गति को ट्रैक करने की सुविधा काम नहीं करती है, तो xrCreateEyeTrackerANDROID से XR_ERROR_FEATURE_UNSUPPORTED वापस लाया जाएगा.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrCreateEyeTrackerANDROID को कॉल करने से पहले, XR_ANDROID_avatar_eyes एक्सटेंशन चालू होना चाहिए
  • session यह एक मान्य XrSession हैंडल होना चाहिए
  • createInfo यह, XrEyeTrackerCreateInfoANDROID स्ट्रक्चर के लिए मान्य पॉइंटर होना चाहिए
  • eyeTracker XrEyeTrackerANDROID हैंडल का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

प्रोसेस पूरी नहीं हो सकी

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • 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

XrEyeTrackerCreateInfoANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:

typedef struct XrEyeTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrEyeTrackerCreateInfoANDROID;

पैसे चुकाकर बने सदस्यों के ब्यौरे

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.

XrEyeTrackerCreateInfoANDROID स्ट्रक्चर में, XrEyeTrackerANDROID हैंडल बनाने के लिए ज़रूरी जानकारी दी गई है.

मान्य इस्तेमाल (इंप्लिसिट)

xrDestroyEyeTrackerANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:

XrResult xrDestroyEyeTrackerANDROID(
    XrEyeTrackerANDROID                         eyeTracker);

पैरामीटर की जानकारी

xrDestroyEyeTrackerANDROID फ़ंक्शन, आंखों की गतिविधियों को ट्रैक करने की सुविधाएं बंद करने के बाद, eyeTracker और उससे जुड़े संसाधनों को रिलीज़ कर देता है.

मान्य इस्तेमाल (इंप्लिसिट)

थ्रेड की सुरक्षा

  • eyeTracker और किसी भी चाइल्ड हैंडल का ऐक्सेस, बाहरी तौर पर सिंक होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS

प्रोसेस पूरी नहीं हो सकी

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

आंखों की जानकारी पाना

xrGetEyesInfoANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:

XrResult xrGetEyesInfoANDROID(
    XrEyeTrackerANDROID                         eyeTracker,
    const XrEyesGetInfoANDROID*                 getInfo,
    XrEyesANDROID*                              infoOutput);

पैरामीटर की जानकारी

  • eyeTracker एक XrEyeTrackerANDROID है, जिसे पहले xrCreateEyeTrackerANDROID से बनाया गया था.
  • getInfo, XrEyesGetInfoANDROID का पॉइंटर है. इसका इस्तेमाल यह बताने के लिए किया जाता है कि किस तरह का आउटपुट चाहिए.
  • infoOutput, XrEyesANDROID का पॉइंटर है. इसमें आंखों की जानकारी होती है. जैसे, पोज़ और स्थितियां.

xrGetEyesInfoANDROID फ़ंक्शन, आंखों की स्थिति और पोज़ की जानकारी पाता है.

xrGetEyesInfoANDROID को कॉल करने के समय, आंखों की जानकारी को हल किया जाता है और इसे बेस स्पेस के हिसाब से दिखाया जाता है. इसके लिए, XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace का इस्तेमाल किया जाता है.

किसी भी समय, आंखों की स्थिति और दिशा, दोनों को ट्रैक किया जाता है या ट्रैक नहीं किया जाता. इसका मतलब है कि ऐप्लिकेशन को उम्मीद है कि दिए गए XrEyesANDROID::eyes पर, XR_SPACE_LOCATION_POSITION_TRACKED_BIT और XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT, दोनों को सेट या हटाया जाएगा. साथ ही, XrEyesANDROID::mode से ट्रैकिंग की स्थितियों का पता चलेगा.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrGetEyesInfoANDROID को कॉल करने से पहले, XR_ANDROID_avatar_eyes एक्सटेंशन चालू होना चाहिए
  • eyeTracker XrEyeTrackerANDROID हैंडल मान्य होना चाहिए
  • getInfo यह, मान्य XrEyesGetInfoANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
  • infoOutput को XrEyesANDROID स्ट्रक्चर का पॉइंटर होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

प्रोसेस पूरी नहीं हो सकी

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • 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_TIME_INVALID

XrEyesGetInfoANDROID स्ट्रक्चर में, आंखों के पोज़ और स्थितियों को वापस पाने के लिए ज़रूरी जानकारी होती है.

typedef struct XrEyesGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
    XrSpace            baseSpace;
} XrEyesGetInfoANDROID;

पैसे चुकाकर बने सदस्यों के ब्यौरे

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.
  • time वह XrTime है जिस पर baseSpace के हिसाब से निर्देशांक का आकलन किया जाना है.
  • baseSpace time पर, आंखों की पोज़िशन इस XrSpace के हिसाब से होगी.

मान्य इस्तेमाल (इंप्लिसिट)

XrEyesANDROID स्ट्रक्चर में, ट्रैक की गई आंखों की जानकारी होती है.

typedef struct XrEyesANDROID {
    XrStructureType             type;
    void*                       next;
    XrEyeANDROID                eyes[XR_EYE_MAX_ANDROID];
    XrEyeTrackingModeANDROID    mode;
} XrEyesANDROID;

पैसे चुकाकर बने सदस्यों के ब्यौरे

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर तय नहीं किए गए हैं.
  • eyes, बाईं और दाईं आंखों के लिए XrEyeANDROID का एक कलेक्शन है, जिसे XrEyeIndexANDROID से इंडेक्स किया गया है.
  • mode, XrEyeTrackingModeANDROID है. इससे पता चलता है कि आंखों को ट्रैक किया जा रहा है या नहीं और कौनसी आंखों को ट्रैक किया जा रहा है.

मान्य इस्तेमाल (इंप्लिसिट)

XrEyeANDROID स्ट्रक्चर, आंख की स्थिति, जगह, और ओरिएंटेशन के बारे में बताता है.

typedef struct XrEyeANDROID {
    XrEyeStateANDROID    eyeState;
    XrPosef              eyePose;
} XrEyeANDROID;

पैसे चुकाकर बने सदस्यों के ब्यौरे

  • eyeState, किसी आंख का XrEyeStateANDROID है.
  • pose एक XrPosef है, जो XrEyesGetInfoANDROID::baseSpace के रेफ़रंस फ़्रेम में, किसी आंख के ऑरिजिन की पोज़िशन और ओरिएंटेशन तय करता है. यहां पहचान के ओरिएंटेशन में, उपयोगकर्ता की आंखों में +Z, दाईं ओर +X, और ऊपर +Y के साथ कोऑर्डिनेट ऐक्स दिखाया गया है.

मान्य इस्तेमाल (इंप्लिसिट)

  • XrEyeANDROID का इस्तेमाल करने से पहले, XR_ANDROID_avatar_eyes एक्सटेंशन चालू होना चाहिए
  • eyeState की वैल्यू, XrEyeStateANDROID की मान्य वैल्यू होनी चाहिए

XrEyeStateANDROID एनोटेशन, ट्रैक की गई आंखों की अलग-अलग स्थितियों की पहचान करता है.

typedef enum XrEyeStateANDROID {
    XR_EYE_STATE_INVALID_ANDROID = 0,
    XR_EYE_STATE_GAZING_ANDROID = 1,
    XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;

वैल्यू के इन विकल्पों का मतलब यह है:

Enum

ब्यौरा

XR_EYE_STATE_INVALID_ANDROID

इससे पता चलता है कि आइकॉन में गड़बड़ी है या वह मौजूद नहीं है.

XR_EYE_STATE_GAZING_ANDROID

इससे पता चलता है कि आंखें एकटक देख रही हैं.

XR_EYE_STATE_SHUT_ANDROID

इससे पता चलता है कि पलक झपकने या आंख मारने की वजह से आंख बंद है.

XrEyeIndexANDROID एनोटेशन, बाएं या दाएं आईरिस के इंडेक्स की पहचान करता है.

typedef enum XrEyeIndexANDROID {
    XR_EYE_INDEX_LEFT_ANDROID = 0,
    XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;

वैल्यू के इन विकल्पों का मतलब यह है:

Enum

ब्यौरा

XR_EYE_INDEX_LEFT_ANDROID

बाईं आंख.

XR_EYE_INDEX_RIGHT_ANDROID

दाईं आंख.

XrEyeTrackingModeANDROID एनोटेशन, ट्रैक की गई आंखों के अलग-अलग मोड की पहचान करता है.

typedef enum XrEyeTrackingModeANDROID {
    XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID = 0,
    XR_EYE_TRACKING_MODE_RIGHT_ANDROID = 1,
    XR_EYE_TRACKING_MODE_LEFT_ANDROID = 2,
    XR_EYE_TRACKING_MODE_BOTH_ANDROID = 3
} XrEyeTrackingModeANDROID;

वैल्यू के इन विकल्पों का मतलब यह है:

Enum

ब्यौरा

XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID

इससे पता चलता है कि आंखों की गतिविधियों को ट्रैक करने की सुविधा चालू नहीं है.

XR_EYE_TRACKING_MODE_RIGHT_ANDROID

इससे पता चलता है कि सिर्फ़ दाईं आंख ट्रैकिंग कर रही है.

XR_EYE_TRACKING_MODE_LEFT_ANDROID

इससे पता चलता है कि सिर्फ़ बाईं आंख ट्रैकिंग कर रही है.

XR_EYE_TRACKING_MODE_BOTH_ANDROID

इससे पता चलता है कि बाईं और दाईं, दोनों आंखें ट्रैक कर रही हैं.

आंखों की गतिविधियों को ट्रैक करने के लिए कोड का उदाहरण

यहां दिए गए उदाहरण में, किसी व्यू स्पेस के हिसाब से आंख की जानकारी पाने का तरीका बताया गया है.

XrSession session; // previously initialized, for example, created at app startup.
XrSpace viewSpace; // space created for XR_REFERENCE_SPACE_TYPE_VIEW.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateEyeTrackerANDROID xrCreateEyeTrackerANDROID; // previously initialized
PFN_xrDestroyEyeTrackerANDROID xrDestroyEyeTrackerANDROID; // previously initialized
PFN_xrGetEyesInfoANDROID xrGetEyesInfoANDROID; // previously initialized

// This will use the XrSession that is bound to the eye tracker done at time of creation.
XrEyeTrackerANDROID eyeTracker;
XrEyeTrackerCreateInfoANDROID createInfo{
    .type = XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID,
    .next = nullptr};
CHK_XR(xrCreateEyeTrackerANDROID(session, &createInfo, &eyeTracker));

while (1) {
    // ...
    // For every frame in frame loop
    // ...

    XrFrameState frameState;  // previously returned from xrWaitFrame
    const XrTime time = frameState.predictedDisplayTime;
    XrEyesANDROID eyesInfo{.type = XR_TYPE_EYES_ANDROID,
                           .next = nullptr,
                           .mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
    XrEyesGetInfoANDROID eyesGetInfo{.type = XR_TYPE_EYES_GET_INFO_ANDROID,
                                     .next = nullptr,
                                     .time = time,
                                     .baseSpace = viewSpace};
    CHK_XR(xrGetEyesInfoANDROID(eyeTracker, &eyesGetInfo, &eyesInfo));

    // eyes tracking information is now available:
    // drawLeftEye(eyesInfo.eyes[XR_EYE_INDEX_LEFT_ANDROID].eyePose);
    // drawRightEye(eyesInfo.eyes[XR_EYE_INDEX_RIGHT_ANDROID].eyePose);

    // ...
    // Finish frame loop
    // ...
}

// after usage
CHK_XR(xrDestroyEyeTrackerANDROID(eyeTracker));

नए ऑब्जेक्ट टाइप

नई Enum Constant

  • XR_EYE_MAX_ANDROID

XrObjectType एनोटेशन को इनके साथ जोड़ा गया है:

  • XR_OBJECT_TYPE_EYE_TRACKER_ANDROID

XrStructureType एनोटेशन को इनके साथ जोड़ा गया है:

  • XR_TYPE_EYES_ANDROID
  • XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_EYES_GET_INFO_ANDROID
  • XR_TYPE_SYSTEM_AVATAR_EYES_PROPERTIES_ANDROID

नए Enums

नए स्ट्रक्चर

नए फ़ंक्शन

समस्याएं

वर्शन का इतिहास

  • पहला बदलाव, 04-09-2024 (लेवाना चेन)
    • एक्सटेंशन के बारे में शुरुआती जानकारी