XR_ANDROID_hand_mesh OpenXR এক্সটেনশন

নাম স্ট্রিং

XR_ANDROID_hand_mesh

এক্সটেনশন প্রকার

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

704

রিভিশন

1

এক্সটেনশন এবং সংস্করণ নির্ভরতা

OpenXR 1.0

সর্বশেষ সংশোধিত তারিখ

2024-09-10

আইপি স্ট্যাটাস

কোন পরিচিত আইপি দাবি.

অবদানকারী

নিহাভ জৈন, গুগল

কেয়ার্ন ওভারটার্ফ, গুগল

স্পেন্সার কুইন, গুগল

লেভানা চেন, গুগল

ওভারভিউ

এই এক্সটেনশনটি একটি গতিশীল হ্যান্ড মেশ হিসাবে উপস্থাপন করা হ্যান্ড ট্র্যাকিং সক্ষম করে।

এই এক্সটেনশনটি ব্যবহারকারীর হাতের ব্যক্তিগতকৃত উপস্থাপনার জালের জন্য শীর্ষবিন্দু এবং সূচক বাফার প্রদান করার উদ্দেশ্যে করা হয়েছে। এটি আবদ্ধকরণ এবং ভিজ্যুয়ালাইজেশনের জন্য ব্যবহার করা যেতে পারে

এই এক্সটেনশনটি অন্য হাত ট্র্যাকিং উদ্দেশ্যে ব্যবহার করা উচিত নয়।

  • ইন্টারঅ্যাকশনের জন্য, XR_EXT_hand_interaction ব্যবহার করা যেতে পারে
  • কঙ্কাল জয়েন্টের জন্য, XR_EXT_hand_tracking ব্যবহার করা যেতে পারে

হ্যান্ড ট্র্যাকিং ডেটা সংবেদনশীল ব্যক্তিগত তথ্য হতে পারে এবং ব্যক্তিগত গোপনীয়তা এবং সততার সাথে ঘনিষ্ঠভাবে যুক্ত। এটি দৃঢ়ভাবে সুপারিশ করা হয় যে অ্যাপ্লিকেশনগুলি যেগুলি হ্যান্ড ট্র্যাকিং ডেটা সঞ্চয় বা স্থানান্তরিত করে সেগুলি সর্বদা ব্যবহারকারীকে সক্রিয় এবং নির্দিষ্ট গ্রহণযোগ্যতার জন্য জিজ্ঞাসা করে।

সিস্টেমের ক্ষমতা পরিদর্শন করুন

xrGetSystemProperties কল করার সময় একটি অ্যাপ্লিকেশন XrSystemHandMeshTrackingPropertiesANDROID কাঠামোকে XrSystemProperties-এর সাথে চেইন করে সিস্টেমটি হ্যান্ড ট্র্যাকিং মেশগুলি করতে সক্ষম কিনা তা পরীক্ষা করতে পারে

typedef struct XrSystemHandMeshTrackingPropertiesANDROID {
  XrStructureType    type;
  void*              next;
  XrBool32           supportsHandMeshTracking;
  XrBool32           supportsTextureUV;
  XrBool32           supportsVertexNormal;
} XrSystemHandMeshTrackingPropertiesANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • supportsHandMeshTracking হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে কিনা।
  • supportsTextureUV হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId জাল শীর্ষবিন্দুর জন্য টেক্সচার UV সমর্থন করে কিনা।
  • supportsVertexNormal হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId জাল শীর্ষবিন্দুর জন্য শীর্ষবিন্দু স্বাভাবিক সমর্থন করে কিনা।

অ্যাপ্লিকেশানটি supportsHandMeshTracking করলে XR_FALSE হলে হ্যান্ড মেশের ক্ষমতা ব্যবহার করা এড়ানো উচিত , যেহেতু এর মানে সিস্টেমটি হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে না। এই ক্ষেত্রে, xrCreateHandMeshTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে।

যদি supportsHandMeshTracking XR_TRUE রিটার্ন করে, সিস্টেম হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে। প্রতিটি ফ্রেমে xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশনকে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে XrHandMeshANDROID::indexCount এবং XrHandMeshANDROID::vertexCount ব্যবহার করা উচিত এবং তাদের রেন্ডার লুপে পুনরায় ব্যবহার করা উচিত।

যদি supportsTextureUV XR_FALSE রিটার্ন করে, সিস্টেমটি জালের শীর্ষবিন্দুর জন্য টেক্সচার UV সমর্থন করে না, এবং সেইজন্য xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশন XrHandMeshANDROID::textureUVs NULL পাবে।

যদি supportsVertexNormal XR_FALSE রিটার্ন করে, সিস্টেমটি জালের শীর্ষবিন্দুর জন্য ভার্টেক্স নরমাল সমর্থন করে না, এবং তাই xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশন XrHandMeshANDROID::normals NULL পাবে।

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি হ্যান্ড মেশ ট্র্যাকার হ্যান্ডেল তৈরি করুন

XR_DEFINE_HANDLE(XrHandMeshTrackerANDROID)

XrHandMeshTrackerANDROID হ্যান্ডেল হ্যান্ড মেশ ট্র্যাকিং এবং সম্পর্কিত সংস্থান পরিচালনার জন্য একটি হ্যান্ড মেশ ট্র্যাকার উপস্থাপন করে।

এই হ্যান্ডেলটি এই এক্সটেনশনের অন্যান্য ফাংশন ব্যবহার করে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে ব্যবহার করা যেতে পারে

একটি অ্যাপ্লিকেশন xrCreateHandMeshTrackerANDROID ফাংশন ব্যবহার করে একটি XrHandMeshTrackerANDROID হ্যান্ডেল তৈরি করতে পারে

XrResult xrCreateHandMeshTrackerANDROID(
    XrSession                                   session,
    const XrHandMeshTrackerCreateInfoANDROID*   createInfo,
    XrHandMeshTrackerANDROID*                   handMeshTracker);

পরামিতি বিবরণ

  • session হল একটি XrSession যেখানে হ্যান্ড মেশ ট্র্যাকার সক্রিয় থাকবে।
  • createInfo হল XrHandMeshTrackerCreateInfoANDROID হ্যান্ড মেশ ট্র্যাকার নির্দিষ্ট করতে ব্যবহৃত হয়।
  • handMeshTracker হল ফেরত XrHandMeshTrackerANDROID হ্যান্ডেল৷

যদি সিস্টেম হ্যান্ড মেশ ট্র্যাকিং সমর্থন না করে, xrCreateHandMeshTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে।

XrHandMeshTrackerANDROID হ্যান্ডেল হ্যান্ড মেশ ট্র্যাকিংয়ের জন্য সমস্ত সংস্থানের মালিক। হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতা সম্পন্ন করার পরে, অ্যাপ্লিকেশনটিকে অবশ্যই xrDestroyHandMeshTrackerANDROID ফাংশন ব্যবহার করে হ্যান্ডেলটি ধ্বংস করতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrCreateHandMeshTrackerANDROID কল করার আগে সক্রিয় করতে হবে
  • session অবশ্যই একটি বৈধ XrSession হ্যান্ডেল হতে হবে
  • createInfo অবশ্যই একটি বৈধ XrHandMeshTrackerCreateInfoANDROID কাঠামোর একটি নির্দেশক হতে হবে
  • handMeshTracker অবশ্যই একটি XrHandMeshTrackerANDROID হ্যান্ডেলের একটি পয়েন্টার হতে হবে

রিটার্ন কোড

সফলতা

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_LIMIT_REACHED

XrHandMeshTrackerCreateInfoANDROID কাঠামো একটি XrHandMeshTrackerANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।

typedef struct XrHandMeshTrackerCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrHandMeshTrackerCreateInfoANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।

বৈধ ব্যবহার (অন্তর্নিহিত)

xrDestroyHandMeshTrackerANDROID ফাংশন handMeshTracker এবং অন্তর্নিহিত সংস্থানগুলি প্রকাশ করে যখন হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতাগুলি শেষ হয়।

XrResult xrDestroyHandMeshTrackerANDROID(
    XrHandMeshTrackerANDROID handMeshTracker);

পরামিতি বিবরণ

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrDestroyHandMeshTrackerANDROID কল করার আগে সক্রিয় করতে হবে
  • handMeshTracker অবশ্যই একটি বৈধ XrHandMeshTrackerANDROID হ্যান্ডেল হতে হবে৷

থ্রেড নিরাপত্তা

  • handMeshTracker এ অ্যাক্সেস এবং যেকোনো শিশু হ্যান্ডেলগুলিকে বাহ্যিকভাবে সিঙ্ক্রোনাইজ করতে হবে

রিটার্ন কোড

সফলতা

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

হাত জাল সনাক্ত করুন

একটি নির্দিষ্ট টাইমস্ট্যাম্পে হ্যান্ড মেশ পুনরুদ্ধার করতে অ্যাপ্লিকেশনটি xrGetHandMeshANDROID ফাংশন ব্যবহার করতে পারেxrGetHandMeshANDROID কল করার সময় XrHandMeshGetInfoANDROID::baseSpace দ্বারা নির্দিষ্ট স্থানের মধ্যে হ্যান্ড মেশের শীর্ষবিন্দুর অবস্থান এবং স্বাভাবিক উপস্থাপন করা হয়।

XrResult xrGetHandMeshANDROID(
    XrHandMeshTrackerANDROID                    handMeshTracker,
    const XrHandMeshGetInfoANDROID*             getInfo,
    XrHandTrackingMeshesANDROID*                handMeshes);

পরামিতি বিবরণ

  • handMeshTracker হল একটি XrHandMeshTrackerANDROID হ্যান্ডেল যা আগে xrCreateHandMeshTrackerANDROID দিয়ে তৈরি করা হয়েছিল৷
  • getInfo হল একটি XrHandMeshGetInfoANDROID কাঠামো যাতে হ্যান্ড মেশ ডেটা জিজ্ঞাসা করার জন্য তথ্য থাকে।
  • handMeshes হল একটি XrHandTrackingMeshesANDROID কাঠামোর একটি নির্দেশক যা হ্যান্ড মেশ ডেটা দিয়ে তৈরি করা হবে।

অ্যাপ্লিকেশনটি রানটাইম দ্বারা উত্পন্ন হ্যান্ড মেশ বাফারগুলি অ্যাক্সেস করতে xrGetHandMeshANDROID ফাংশন ব্যবহার করতে পারে

xrGetHandMeshANDROID- এ প্রথম কল করার আগে অ্যাপ্লিকেশনটির সেশন চলাকালীন অন্তত একবার xrBeginFrame-এ কল করা উচিত

প্রতিটি ফ্রেমে xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশনকে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে XrHandMeshANDROID::indexCount এবং XrHandMeshANDROID::vertexCount ব্যবহার করা উচিত এবং তাদের রেন্ডার লুপে পুনরায় ব্যবহার করা উচিত।

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrGetHandMeshANDROID কল করার আগে সক্রিয় করতে হবে
  • handMeshTracker অবশ্যই একটি বৈধ XrHandMeshTrackerANDROID হ্যান্ডেল হতে হবে৷
  • getInfo অবশ্যই একটি বৈধ XrHandMeshGetInfoANDROID কাঠামোর একটি নির্দেশক হতে হবে
  • handMeshes অবশ্যই একটি XrHandTrackingMeshesANDROID কাঠামোর একটি নির্দেশক হতে হবে৷

রিটার্ন কোড

সফলতা

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_TIME_INVALID

একটি XrHandMeshGetInfoANDROID হ্যান্ড মেশ ডেটা পেতে প্রয়োজনীয় তথ্য বর্ণনা করে।

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

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • baseSpace হল একটি XrSpace যা রেফারেন্স স্পেসকে সংজ্ঞায়িত করে যেখানে time শীর্ষবিন্দুর জন্য রূপান্তরটি সনাক্ত করা যায়।
  • time হল XrTime যে সময়টি বর্ণনা করে যে সময়ে অ্যাপ্লিকেশনটি হ্যান্ড মেশকে জিজ্ঞাসা করতে চায়।

বৈধ ব্যবহার (অন্তর্নিহিত)

XrHandTrackingMeshesANDROID গঠনে উভয় হাতের জন্য জাল ডেটা রয়েছে।

typedef struct XrHandTrackingMeshesANDROID {
    XrStructureType      type;
    void*                next;
    XrHandMeshANDROID    leftHandMesh;
    XrHandMeshANDROID    rightHandMesh;
} XrHandTrackingMeshesANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • leftHandMesh হল বাম হাতের XrHandMeshANDROID
  • rightHandMesh হল ডান হাতের XrHandMeshANDROID

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি XrHandMeshANDROID কাঠামোতে এক হাতের জন্য xrGetHandMeshANDROID ফাংশন থেকে হ্যান্ড মেশ ট্র্যাকিং ডেটা গ্রহণ করার জন্য ডেটা এবং বাফার রয়েছে।

typedef struct XrHandMeshANDROID {
    XrBool32             isActive;
    XrTime               dynamicLastUpdateTime;
    uint32_t             indexCount;
    uint32_t             vertexCount;
    const uint32_t*      indices;
    const XrVector2f*    textureUVs;
    const XrVector3f*    positions;
    const XrVector3f*    normals;
    XrPosef              baseSpaceFromVertexSpace;
} XrHandMeshANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • isActive হল একটি XrBool32 যা নির্দেশ করে যে বর্তমান হ্যান্ড মেশ ট্র্যাকার সক্রিয় আছে কিনা এবং জাল ডেটা বৈধ।
  • dynamicLastUpdateTime হল XrTime যে সময়ে গতিশীল বাফারগুলি সর্বশেষ আপডেট করা হয়েছিল তা নির্দিষ্ট করে৷
  • indexCount হল একটি uint32_t হ্যান্ড মেশের indices সংখ্যা হিসাবে পরিবেশন করে।
  • vertexCount হল একটি uint32_t হ্যান্ড মেশের positions সংখ্যা হিসাবে পরিবেশন করে। এটি textureUVs বা normals জন্যও ব্যবহার করা যেতে পারে যখন তারা সিস্টেম দ্বারা সমর্থিত হয়।
  • indices হল uint32_t এর একটি অ্যারে যা ঘড়ির কাঁটার বিপরীতে ওয়াইন্ডার ক্রমে ত্রিভুজের জন্য জাল সূচকগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল indexCount .
  • textureUVs হল NULL বা XrVector2f এর একটি অ্যারে যা শীর্ষস্থানীয় টেক্সচার স্থানাঙ্কগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • positions হল XrVector3f এর একটি অ্যারে যা baseSpaceFromVertexSpace এ শীর্ষবিন্দুর অবস্থানগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • normals হল একটি NULL বা XrVector3f এর একটি অ্যারে যা baseSpaceFromVertexSpace এ শীর্ষবিন্দুর স্বাভাবিকগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • baseSpaceFromVertexSpace হল XrGetHandMeshANDROID কল করার সময় XrHandMeshGetInfoANDROID::baseSpace- এ অবস্থিত শীর্ষবিন্দু XrSpace । রেন্ডারিংয়ের সময় জালের শীর্ষবিন্দু এবং স্বাভাবিকের স্থানাঙ্ক স্থান পরিবর্তন করতে অ্যাপ্লিকেশনগুলি এটি ব্যবহার করতে পারে

হাতের জালটি ত্রিভুজ তালিকায় উপস্থাপিত হয় এবং হাতের বাইরে থেকে দেখার সময় প্রতিটি ত্রিভুজের শীর্ষবিন্দু ঘড়ির কাঁটার বিপরীতে থাকে।

যখন ফিরে আসা isActive মান XR_FALSE হয়, তখন এটি নির্দেশ করে যে হাতটি সক্রিয়ভাবে ট্র্যাক করা হয়নি; উদাহরণস্বরূপ, হাতটি সেন্সরের সীমার বাইরে, ইনপুট ফোকাস অ্যাপ্লিকেশন থেকে সরিয়ে নেওয়া হয়েছে, বা অ্যাপ্লিকেশনটির কাছে হ্যান্ড ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি নেই।

যখন প্রত্যাবর্তিত isActive মানটি XR_TRUE হয়, তখন হ্যান্ড ট্র্যাকিং জালটি indices এবং positions উপস্থাপিত হয়, textureUVs এবং normals সহ, যদি সেগুলি সিস্টেম দ্বারা সমর্থিত হয়, তখন xrGetHandMeshANDROID ফাংশনকে দেওয়া XrHandMeshGetInfoANDROID::সময়ের সর্বশেষ ডেটাতে আপডেট করা হয়৷

XrHandMeshANDROID- এ ফিরে আসা হ্যান্ড মেশ বাফার দ্বারা নির্দেশিত মেমরি রানটাইমের মালিকানাধীন এবং অ্যাপ্লিকেশনের সাথে শেয়ার করা হয়েছে। XrHandMeshTrackerANDROID হ্যান্ডেলটি বৈধ থাকাকালীন xrBeginFrame- এ পরবর্তী কল না হওয়া পর্যন্ত মেমরিটি যেকোনো থ্রেড থেকে অ্যাক্সেস করা নিরাপদ।

  • indices এবং textureUVs দ্বারা নির্দেশিত মানগুলি গতিশীল নয়
  • পয়েন্টার এবং positions এবং normals দ্বারা নির্দেশিত মানগুলি গতিশীল যে উভয়ই xrBeginFrame- এ কলের মধ্যে পরিবর্তিত হতে পারে । অ্যাপ্লিকেশনটি শেষ ফ্রেমের পর থেকে মানগুলি পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করতে dynamicLastUpdateTime ব্যবহার করতে পারে এবং কোনও পরিবর্তন না হলে অপ্রয়োজনীয় ডেটা প্রক্রিয়াকরণ এড়াতে পারে।

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই XrHandMeshANDROID ব্যবহার করার আগে সক্রিয় করতে হবে
  • indices একটি বৈধ uint32_t মান একটি পয়েন্টার হতে হবে
  • textureUVs অবশ্যই একটি বৈধ XrVector2f কাঠামোর একটি পয়েন্টার হতে হবে
  • positions অবশ্যই একটি বৈধ XrVector3f কাঠামোর একটি নির্দেশক হতে হবে৷
  • normals অবশ্যই একটি বৈধ XrVector3f কাঠামোর একটি নির্দেশক হতে হবে

হাত জাল ট্র্যাকিং জন্য উদাহরণ কোড

নিম্নলিখিত উদাহরণ কোড দেখায় যে রেন্ডারিংয়ের জন্য কীভাবে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে হয়।

XrInstance instance;  // Created at app startup
XrSystemId systemId;  // Received from xrGetSystem() at app startup
XrSession session;    // Created at app startup.
XrSpace appPlaySpace; // Created at app startup.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateHandMeshTrackerANDROID xrCreateHandMeshTrackerANDROID; // previously initialized
PFN_xrDestroyHandMeshTrackerANDROID xrDestroyHandMeshTrackerANDROID; // previously initialized
PFN_xrGetHandMeshANDROID xrGetHandMeshANDROID; // previously initialized

// Inspect system capability
XrSystemHandMeshTrackingPropertiesANDROID handMeshTrackingProps = {
  .type = XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
  .type = XR_TYPE_SYSTEM_PROPERTIES,
  .next = &handMeshTrackingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!handMeshTrackingProps.supportsHandMeshTracking) {
  // hand mesh tracking is not supported.
  return;
}

XrHandMeshTrackerCreateInfoANDROID trackerCreateInfo = {
  .type = XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
};
XrHandMeshTrackerANDROID handMeshTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateHandMeshTrackerANDROID(
    session, &trackerCreateInfo, &handMeshTracker));
// app update loop
while (true) {
    // ...
    // For every frame in frame loop
    // ...

    XrFrameState frameState;  // previously returned from xrWaitFrame
    const XrTime time = frameState.predictedDisplayTime;

    // ...
    XrHandMeshGetInfoANDROID getInfo = {
        .type = XR_TYPE_HAND_MESH_GET_INFO_ANDROID,
        .baseSpace = appPlaySpace,
        .time = time,
    };
    XrHandTrackingMeshesANDROID handMeshes = {
        .type = XR_TYPE_HAND_TRACKING_MESHES_ANDROID
    };
    CHK_XR(xrGetHandMeshANDROID(handMeshTracker, &getInfo, &handMeshes));

    if (handMeshes.leftHandMesh.isActive) {
        // access vertex/index buffers for rendering.
    }

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

CHECK_XR(xrDestroyHandMeshTracker(handMeshTracker));

নতুন অবজেক্টের ধরন

নতুন Enum ধ্রুবক

XrObjectType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_OBJECT_TYPE_HAND_MESH_TRACKER_ANDROID

XrStructureType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
  • XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_HAND_MESH_GET_INFO_ANDROID
  • XR_TYPE_HAND_TRACKING_MESHES_ANDROID

নতুন Enums

নতুন কাঠামো

নতুন ফাংশন

ইস্যু

সংস্করণ ইতিহাস

  • সংশোধন 1, 2024-09-10 (লেভানা চেন)
    • প্রাথমিক এক্সটেনশন বর্ণনা
,

নাম স্ট্রিং

XR_ANDROID_hand_mesh

এক্সটেনশন প্রকার

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

704

রিভিশন

1

এক্সটেনশন এবং সংস্করণ নির্ভরতা

OpenXR 1.0

সর্বশেষ সংশোধিত তারিখ

2024-09-10

আইপি স্ট্যাটাস

কোন পরিচিত আইপি দাবি.

অবদানকারী

নিহাভ জৈন, গুগল

কেয়ার্ন ওভারটার্ফ, গুগল

স্পেন্সার কুইন, গুগল

লেভানা চেন, গুগল

ওভারভিউ

এই এক্সটেনশনটি একটি গতিশীল হ্যান্ড মেশ হিসাবে উপস্থাপন করা হ্যান্ড ট্র্যাকিং সক্ষম করে।

এই এক্সটেনশনটি ব্যবহারকারীর হাতের ব্যক্তিগতকৃত উপস্থাপনার জালের জন্য শীর্ষবিন্দু এবং সূচক বাফার প্রদান করার উদ্দেশ্যে করা হয়েছে। এটি আবদ্ধকরণ এবং ভিজ্যুয়ালাইজেশনের জন্য ব্যবহার করা যেতে পারে

এই এক্সটেনশনটি অন্য হাত ট্র্যাকিং উদ্দেশ্যে ব্যবহার করা উচিত নয়।

  • ইন্টারঅ্যাকশনের জন্য, XR_EXT_hand_interaction ব্যবহার করা যেতে পারে
  • কঙ্কাল জয়েন্টের জন্য, XR_EXT_hand_tracking ব্যবহার করা যেতে পারে

হ্যান্ড ট্র্যাকিং ডেটা সংবেদনশীল ব্যক্তিগত তথ্য হতে পারে এবং ব্যক্তিগত গোপনীয়তা এবং সততার সাথে ঘনিষ্ঠভাবে যুক্ত। এটি দৃঢ়ভাবে সুপারিশ করা হয় যে অ্যাপ্লিকেশনগুলি যেগুলি হ্যান্ড ট্র্যাকিং ডেটা সঞ্চয় বা স্থানান্তরিত করে সেগুলি সর্বদা ব্যবহারকারীকে সক্রিয় এবং নির্দিষ্ট গ্রহণযোগ্যতার জন্য জিজ্ঞাসা করে।

সিস্টেমের ক্ষমতা পরিদর্শন করুন

xrGetSystemProperties কল করার সময় একটি অ্যাপ্লিকেশন XrSystemHandMeshTrackingPropertiesANDROID কাঠামোকে XrSystemProperties-এর সাথে চেইন করে সিস্টেমটি হ্যান্ড ট্র্যাকিং মেশগুলি করতে সক্ষম কিনা তা পরীক্ষা করতে পারে

typedef struct XrSystemHandMeshTrackingPropertiesANDROID {
  XrStructureType    type;
  void*              next;
  XrBool32           supportsHandMeshTracking;
  XrBool32           supportsTextureUV;
  XrBool32           supportsVertexNormal;
} XrSystemHandMeshTrackingPropertiesANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • supportsHandMeshTracking হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে কিনা।
  • supportsTextureUV হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId জাল শীর্ষবিন্দুর জন্য টেক্সচার UV সমর্থন করে কিনা।
  • supportsVertexNormal হল একটি XrBool32 , যা নির্দেশ করে যে নির্বাচিত XrSystemId জাল শীর্ষবিন্দুর জন্য শীর্ষবিন্দু স্বাভাবিক সমর্থন করে কিনা।

অ্যাপ্লিকেশানটি supportsHandMeshTracking করলে XR_FALSE হলে হ্যান্ড মেশের ক্ষমতা ব্যবহার করা এড়ানো উচিত , যেহেতু এর মানে সিস্টেমটি হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে না। এই ক্ষেত্রে, xrCreateHandMeshTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে।

যদি supportsHandMeshTracking XR_TRUE রিটার্ন করে, সিস্টেম হ্যান্ড মেশ ট্র্যাকিং সমর্থন করে। প্রতিটি ফ্রেমে xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশনকে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে XrHandMeshANDROID::indexCount এবং XrHandMeshANDROID::vertexCount ব্যবহার করা উচিত এবং তাদের রেন্ডার লুপে পুনরায় ব্যবহার করা উচিত।

যদি supportsTextureUV XR_FALSE রিটার্ন করে, সিস্টেমটি জালের শীর্ষবিন্দুর জন্য টেক্সচার UV সমর্থন করে না, এবং সেইজন্য xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশন XrHandMeshANDROID::textureUVs NULL পাবে।

যদি supportsVertexNormal XR_FALSE রিটার্ন করে, সিস্টেমটি জালের শীর্ষবিন্দুর জন্য ভার্টেক্স নরমাল সমর্থন করে না, এবং তাই xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশন XrHandMeshANDROID::normals NULL পাবে।

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি হ্যান্ড মেশ ট্র্যাকার হ্যান্ডেল তৈরি করুন

XR_DEFINE_HANDLE(XrHandMeshTrackerANDROID)

XrHandMeshTrackerANDROID হ্যান্ডেল হ্যান্ড মেশ ট্র্যাকিং এবং সম্পর্কিত সংস্থান পরিচালনার জন্য একটি হ্যান্ড মেশ ট্র্যাকার উপস্থাপন করে।

এই হ্যান্ডেলটি এই এক্সটেনশনের অন্যান্য ফাংশন ব্যবহার করে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে ব্যবহার করা যেতে পারে

একটি অ্যাপ্লিকেশন xrCreateHandMeshTrackerANDROID ফাংশন ব্যবহার করে একটি XrHandMeshTrackerANDROID হ্যান্ডেল তৈরি করতে পারে

XrResult xrCreateHandMeshTrackerANDROID(
    XrSession                                   session,
    const XrHandMeshTrackerCreateInfoANDROID*   createInfo,
    XrHandMeshTrackerANDROID*                   handMeshTracker);

পরামিতি বিবরণ

  • session হল একটি XrSession যেখানে হ্যান্ড মেশ ট্র্যাকার সক্রিয় থাকবে।
  • createInfo হল XrHandMeshTrackerCreateInfoANDROID হ্যান্ড মেশ ট্র্যাকার নির্দিষ্ট করতে ব্যবহৃত হয়।
  • handMeshTracker হল ফেরত XrHandMeshTrackerANDROID হ্যান্ডেল৷

যদি সিস্টেম হ্যান্ড মেশ ট্র্যাকিং সমর্থন না করে, xrCreateHandMeshTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে।

XrHandMeshTrackerANDROID হ্যান্ডেল হ্যান্ড মেশ ট্র্যাকিংয়ের জন্য সমস্ত সংস্থানের মালিক। হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতা সম্পন্ন করার পরে, অ্যাপ্লিকেশনটিকে অবশ্যই xrDestroyHandMeshTrackerANDROID ফাংশন ব্যবহার করে হ্যান্ডেলটি ধ্বংস করতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrCreateHandMeshTrackerANDROID কল করার আগে সক্রিয় করতে হবে
  • session অবশ্যই একটি বৈধ XrSession হ্যান্ডেল হতে হবে
  • createInfo অবশ্যই একটি বৈধ XrHandMeshTrackerCreateInfoANDROID কাঠামোর একটি নির্দেশক হতে হবে
  • handMeshTracker অবশ্যই একটি XrHandMeshTrackerANDROID হ্যান্ডেলের একটি পয়েন্টার হতে হবে

রিটার্ন কোড

সফলতা

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_LIMIT_REACHED

XrHandMeshTrackerCreateInfoANDROID কাঠামো একটি XrHandMeshTrackerANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।

typedef struct XrHandMeshTrackerCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrHandMeshTrackerCreateInfoANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।

বৈধ ব্যবহার (অন্তর্নিহিত)

xrDestroyHandMeshTrackerANDROID ফাংশন handMeshTracker এবং অন্তর্নিহিত সংস্থানগুলি প্রকাশ করে যখন হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতাগুলি শেষ হয়।

XrResult xrDestroyHandMeshTrackerANDROID(
    XrHandMeshTrackerANDROID handMeshTracker);

পরামিতি বিবরণ

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrDestroyHandMeshTrackerANDROID কল করার আগে সক্রিয় করতে হবে
  • handMeshTracker অবশ্যই একটি বৈধ XrHandMeshTrackerANDROID হ্যান্ডেল হতে হবে৷

থ্রেড নিরাপত্তা

  • handMeshTracker এ অ্যাক্সেস এবং যেকোনো শিশু হ্যান্ডেলগুলিকে বাহ্যিকভাবে সিঙ্ক্রোনাইজ করতে হবে

রিটার্ন কোড

সফলতা

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

হাত জাল সনাক্ত করুন

একটি নির্দিষ্ট টাইমস্ট্যাম্পে হ্যান্ড মেশ পুনরুদ্ধার করতে অ্যাপ্লিকেশনটি xrGetHandMeshANDROID ফাংশন ব্যবহার করতে পারেxrGetHandMeshANDROID কল করার সময় XrHandMeshGetInfoANDROID::baseSpace দ্বারা নির্দিষ্ট স্থানের মধ্যে হ্যান্ড মেশের শীর্ষবিন্দুর অবস্থান এবং স্বাভাবিক উপস্থাপন করা হয়।

XrResult xrGetHandMeshANDROID(
    XrHandMeshTrackerANDROID                    handMeshTracker,
    const XrHandMeshGetInfoANDROID*             getInfo,
    XrHandTrackingMeshesANDROID*                handMeshes);

পরামিতি বিবরণ

  • handMeshTracker হল একটি XrHandMeshTrackerANDROID হ্যান্ডেল যা আগে xrCreateHandMeshTrackerANDROID দিয়ে তৈরি করা হয়েছিল৷
  • getInfo হল একটি XrHandMeshGetInfoANDROID কাঠামো যাতে হ্যান্ড মেশ ডেটা জিজ্ঞাসা করার জন্য তথ্য থাকে।
  • handMeshes হল একটি XrHandTrackingMeshesANDROID কাঠামোর একটি নির্দেশক যা হ্যান্ড মেশ ডেটা দিয়ে তৈরি করা হবে।

অ্যাপ্লিকেশনটি রানটাইম দ্বারা উত্পন্ন হ্যান্ড মেশ বাফারগুলি অ্যাক্সেস করতে xrGetHandMeshANDROID ফাংশন ব্যবহার করতে পারে

xrGetHandMeshANDROID- এ প্রথম কল করার আগে অ্যাপ্লিকেশনটির সেশন চলাকালীন অন্তত একবার xrBeginFrame-এ কল করা উচিত

প্রতিটি ফ্রেমে xrGetHandMeshANDROID কল করার সময় একটি অ্যাপ্লিকেশনকে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে XrHandMeshANDROID::indexCount এবং XrHandMeshANDROID::vertexCount ব্যবহার করা উচিত এবং তাদের রেন্ডার লুপে পুনরায় ব্যবহার করা উচিত।

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই xrGetHandMeshANDROID কল করার আগে সক্রিয় করতে হবে
  • handMeshTracker অবশ্যই একটি বৈধ XrHandMeshTrackerANDROID হ্যান্ডেল হতে হবে৷
  • getInfo অবশ্যই একটি বৈধ XrHandMeshGetInfoANDROID কাঠামোর একটি নির্দেশক হতে হবে
  • handMeshes অবশ্যই একটি XrHandTrackingMeshesANDROID কাঠামোর একটি নির্দেশক হতে হবে৷

রিটার্ন কোড

সফলতা

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_TIME_INVALID

একটি XrHandMeshGetInfoANDROID হ্যান্ড মেশ ডেটা পেতে প্রয়োজনীয় তথ্য বর্ণনা করে।

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

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • baseSpace হল একটি XrSpace যা রেফারেন্স স্পেসকে সংজ্ঞায়িত করে যেখানে time শীর্ষবিন্দুর জন্য রূপান্তরটি সনাক্ত করা যায়।
  • time হল XrTime যে সময়টি বর্ণনা করে যে সময়ে অ্যাপ্লিকেশনটি হ্যান্ড মেশকে জিজ্ঞাসা করতে চায়।

বৈধ ব্যবহার (অন্তর্নিহিত)

XrHandTrackingMeshesANDROID গঠনে উভয় হাতের জন্য জাল ডেটা রয়েছে।

typedef struct XrHandTrackingMeshesANDROID {
    XrStructureType      type;
    void*                next;
    XrHandMeshANDROID    leftHandMesh;
    XrHandMeshANDROID    rightHandMesh;
} XrHandTrackingMeshesANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • leftHandMesh হল বাম হাতের XrHandMeshANDROID
  • rightHandMesh হল ডান হাতের XrHandMeshANDROID

বৈধ ব্যবহার (অন্তর্নিহিত)

একটি XrHandMeshANDROID কাঠামোতে এক হাতের জন্য xrGetHandMeshANDROID ফাংশন থেকে হ্যান্ড মেশ ট্র্যাকিং ডেটা গ্রহণ করার জন্য ডেটা এবং বাফার রয়েছে।

typedef struct XrHandMeshANDROID {
    XrBool32             isActive;
    XrTime               dynamicLastUpdateTime;
    uint32_t             indexCount;
    uint32_t             vertexCount;
    const uint32_t*      indices;
    const XrVector2f*    textureUVs;
    const XrVector3f*    positions;
    const XrVector3f*    normals;
    XrPosef              baseSpaceFromVertexSpace;
} XrHandMeshANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • isActive হল একটি XrBool32 যা নির্দেশ করে যে বর্তমান হ্যান্ড মেশ ট্র্যাকার সক্রিয় আছে কিনা এবং জাল ডেটা বৈধ।
  • dynamicLastUpdateTime হল XrTime যে সময়ে গতিশীল বাফারগুলি সর্বশেষ আপডেট করা হয়েছিল তা নির্দিষ্ট করে৷
  • indexCount হল একটি uint32_t হ্যান্ড মেশের indices সংখ্যা হিসাবে পরিবেশন করে।
  • vertexCount হল একটি uint32_t হ্যান্ড মেশের positions সংখ্যা হিসাবে পরিবেশন করে। এটি textureUVs বা normals জন্যও ব্যবহার করা যেতে পারে যখন তারা সিস্টেম দ্বারা সমর্থিত হয়।
  • indices হল uint32_t এর একটি অ্যারে যা ঘড়ির কাঁটার বিপরীতে ওয়াইন্ডার ক্রমে ত্রিভুজের জন্য জাল সূচকগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল indexCount .
  • textureUVs হল NULL বা XrVector2f এর একটি অ্যারে যা শীর্ষস্থানীয় টেক্সচার স্থানাঙ্কগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • positions হল XrVector3f এর একটি অ্যারে যা baseSpaceFromVertexSpace এ শীর্ষবিন্দুর অবস্থানগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • normals হল একটি NULL বা XrVector3f এর একটি অ্যারে যা baseSpaceFromVertexSpace এ শীর্ষবিন্দুর স্বাভাবিকগুলিকে উপস্থাপন করে। নির্দেশিত মানগুলির সংখ্যা হল vertexCount .
  • baseSpaceFromVertexSpace হল XrGetHandMeshANDROID কল করার সময় XrHandMeshGetInfoANDROID::baseSpace- এ অবস্থিত শীর্ষবিন্দু XrSpace । রেন্ডারিংয়ের সময় জালের শীর্ষবিন্দু এবং স্বাভাবিকের স্থানাঙ্ক স্থান পরিবর্তন করতে অ্যাপ্লিকেশনগুলি এটি ব্যবহার করতে পারে

হাতের জালটি ত্রিভুজ তালিকায় উপস্থাপিত হয় এবং হাতের বাইরে থেকে দেখার সময় প্রতিটি ত্রিভুজের শীর্ষবিন্দু ঘড়ির কাঁটার বিপরীতে থাকে।

যখন ফিরে আসা isActive মান XR_FALSE হয়, তখন এটি নির্দেশ করে যে হাতটি সক্রিয়ভাবে ট্র্যাক করা হয়নি; উদাহরণস্বরূপ, হাতটি সেন্সরের সীমার বাইরে, ইনপুট ফোকাস অ্যাপ্লিকেশন থেকে সরিয়ে নেওয়া হয়েছে, বা অ্যাপ্লিকেশনটির কাছে হ্যান্ড ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি নেই।

যখন প্রত্যাবর্তিত isActive মানটি XR_TRUE হয়, তখন হ্যান্ড ট্র্যাকিং জালটি indices এবং positions উপস্থাপিত হয়, textureUVs এবং normals সহ, যদি সেগুলি সিস্টেম দ্বারা সমর্থিত হয়, তখন xrGetHandMeshANDROID ফাংশনকে দেওয়া XrHandMeshGetInfoANDROID::সময়ের সর্বশেষ ডেটাতে আপডেট করা হয়৷

XrHandMeshANDROID- এ ফিরে আসা হ্যান্ড মেশ বাফার দ্বারা নির্দেশিত মেমরি রানটাইমের মালিকানাধীন এবং অ্যাপ্লিকেশনের সাথে শেয়ার করা হয়েছে। XrHandMeshTrackerANDROID হ্যান্ডেলটি বৈধ থাকাকালীন xrBeginFrame- এ পরবর্তী কল না হওয়া পর্যন্ত মেমরিটি যেকোনো থ্রেড থেকে অ্যাক্সেস করা নিরাপদ।

  • indices এবং textureUVs দ্বারা নির্দেশিত মানগুলি গতিশীল নয়
  • পয়েন্টার এবং positions এবং normals দ্বারা নির্দেশিত মানগুলি গতিশীল যে উভয়ই xrBeginFrame- এ কলের মধ্যে পরিবর্তিত হতে পারে । অ্যাপ্লিকেশনটি শেষ ফ্রেমের পর থেকে মানগুলি পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করতে dynamicLastUpdateTime ব্যবহার করতে পারে এবং কোনও পরিবর্তন না হলে অপ্রয়োজনীয় ডেটা প্রক্রিয়াকরণ এড়াতে পারে।

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XR_ANDROID_hand_mesh এক্সটেনশনটি অবশ্যই XrHandMeshANDROID ব্যবহার করার আগে সক্রিয় করতে হবে
  • indices একটি বৈধ uint32_t মান একটি পয়েন্টার হতে হবে
  • textureUVs অবশ্যই একটি বৈধ XrVector2f কাঠামোর একটি পয়েন্টার হতে হবে
  • positions অবশ্যই একটি বৈধ XrVector3f কাঠামোর একটি নির্দেশক হতে হবে৷
  • normals অবশ্যই একটি বৈধ XrVector3f কাঠামোর একটি নির্দেশক হতে হবে

হাত জাল ট্র্যাকিং জন্য উদাহরণ কোড

নিম্নলিখিত উদাহরণ কোড দেখায় যে রেন্ডারিংয়ের জন্য কীভাবে হ্যান্ড মেশ বাফার অ্যাক্সেস করতে হয়।

XrInstance instance;  // Created at app startup
XrSystemId systemId;  // Received from xrGetSystem() at app startup
XrSession session;    // Created at app startup.
XrSpace appPlaySpace; // Created at app startup.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateHandMeshTrackerANDROID xrCreateHandMeshTrackerANDROID; // previously initialized
PFN_xrDestroyHandMeshTrackerANDROID xrDestroyHandMeshTrackerANDROID; // previously initialized
PFN_xrGetHandMeshANDROID xrGetHandMeshANDROID; // previously initialized

// Inspect system capability
XrSystemHandMeshTrackingPropertiesANDROID handMeshTrackingProps = {
  .type = XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
  .type = XR_TYPE_SYSTEM_PROPERTIES,
  .next = &handMeshTrackingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!handMeshTrackingProps.supportsHandMeshTracking) {
  // hand mesh tracking is not supported.
  return;
}

XrHandMeshTrackerCreateInfoANDROID trackerCreateInfo = {
  .type = XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
};
XrHandMeshTrackerANDROID handMeshTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateHandMeshTrackerANDROID(
    session, &trackerCreateInfo, &handMeshTracker));
// app update loop
while (true) {
    // ...
    // For every frame in frame loop
    // ...

    XrFrameState frameState;  // previously returned from xrWaitFrame
    const XrTime time = frameState.predictedDisplayTime;

    // ...
    XrHandMeshGetInfoANDROID getInfo = {
        .type = XR_TYPE_HAND_MESH_GET_INFO_ANDROID,
        .baseSpace = appPlaySpace,
        .time = time,
    };
    XrHandTrackingMeshesANDROID handMeshes = {
        .type = XR_TYPE_HAND_TRACKING_MESHES_ANDROID
    };
    CHK_XR(xrGetHandMeshANDROID(handMeshTracker, &getInfo, &handMeshes));

    if (handMeshes.leftHandMesh.isActive) {
        // access vertex/index buffers for rendering.
    }

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

CHECK_XR(xrDestroyHandMeshTracker(handMeshTracker));

নতুন অবজেক্টের ধরন

নতুন Enum ধ্রুবক

XrObjectType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_OBJECT_TYPE_HAND_MESH_TRACKER_ANDROID

XrStructureType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
  • XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_HAND_MESH_GET_INFO_ANDROID
  • XR_TYPE_HAND_TRACKING_MESHES_ANDROID

নতুন Enums

নতুন কাঠামো

নতুন ফাংশন

ইস্যু

সংস্করণ ইতিহাস

  • সংশোধন 1, 2024-09-10 (লেভানা চেন)
    • প্রাথমিক এক্সটেনশন বর্ণনা