নাম স্ট্রিং
XR_ANDROID_hand_mesh
এক্সটেনশন প্রকার
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
704
রিভিশন
1
এক্সটেনশন এবং সংস্করণ নির্ভরতা
সর্বশেষ সংশোধিত তারিখ
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_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrSystemHandMeshTrackingPropertiesANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
হতে হবে -
next
অবশ্যই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 বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandMeshTrackerCreateInfoANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে
xrDestroyHandMeshTrackerANDROID ফাংশন handMeshTracker
এবং অন্তর্নিহিত সংস্থানগুলি প্রকাশ করে যখন হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতাগুলি শেষ হয়।
XrResult xrDestroyHandMeshTrackerANDROID(
XrHandMeshTrackerANDROID handMeshTracker);
পরামিতি বিবরণ
-
handMeshTracker
হল একটি XrHandMeshTrackerANDROID পূর্বে xrCreateHandMeshTrackerANDROID দ্বারা তৈরি৷
বৈধ ব্যবহার (অন্তর্নিহিত)
-
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
যে সময়টি বর্ণনা করে যে সময়ে অ্যাপ্লিকেশনটি হ্যান্ড মেশকে জিজ্ঞাসা করতে চায়।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandMeshGetInfoANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_MESH_GET_INFO_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে -
baseSpace
অবশ্যই একটি বৈধ XrSpace হ্যান্ডেল হতে হবে
XrHandTrackingMeshesANDROID গঠনে উভয় হাতের জন্য জাল ডেটা রয়েছে।
typedef struct XrHandTrackingMeshesANDROID {
XrStructureType type;
void* next;
XrHandMeshANDROID leftHandMesh;
XrHandMeshANDROID rightHandMesh;
} XrHandTrackingMeshesANDROID;
সদস্য বিবরণ
-
type
হল এই কাঠামোর XrStructureType । -
next
হলNULL
বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি। -
leftHandMesh
হল বাম হাতের XrHandMeshANDROID । -
rightHandMesh
হল ডান হাতের XrHandMeshANDROID ।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandTrackingMeshesANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_TRACKING_MESHES_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে -
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
নতুন কাঠামো
- XrSystemHandMeshTracking PropertiesANDROID
- XrHandMeshTrackerCreateInfoANDROID
- XrHandMeshGetInfoANDROID
- XrHandMeshANDROID
- XrHandTrackingMeshesANDROID
নতুন ফাংশন
ইস্যু
সংস্করণ ইতিহাস
- সংশোধন 1, 2024-09-10 (লেভানা চেন)
- প্রাথমিক এক্সটেনশন বর্ণনা
নাম স্ট্রিং
XR_ANDROID_hand_mesh
এক্সটেনশন প্রকার
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
704
রিভিশন
1
এক্সটেনশন এবং সংস্করণ নির্ভরতা
সর্বশেষ সংশোধিত তারিখ
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_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrSystemHandMeshTrackingPropertiesANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
হতে হবে -
next
অবশ্যই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 বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandMeshTrackerCreateInfoANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে
xrDestroyHandMeshTrackerANDROID ফাংশন handMeshTracker
এবং অন্তর্নিহিত সংস্থানগুলি প্রকাশ করে যখন হ্যান্ড মেশ ট্র্যাকিং অভিজ্ঞতাগুলি শেষ হয়।
XrResult xrDestroyHandMeshTrackerANDROID(
XrHandMeshTrackerANDROID handMeshTracker);
পরামিতি বিবরণ
-
handMeshTracker
হল একটি XrHandMeshTrackerANDROID পূর্বে xrCreateHandMeshTrackerANDROID দ্বারা তৈরি৷
বৈধ ব্যবহার (অন্তর্নিহিত)
-
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
যে সময়টি বর্ণনা করে যে সময়ে অ্যাপ্লিকেশনটি হ্যান্ড মেশকে জিজ্ঞাসা করতে চায়।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandMeshGetInfoANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_MESH_GET_INFO_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে -
baseSpace
অবশ্যই একটি বৈধ XrSpace হ্যান্ডেল হতে হবে
XrHandTrackingMeshesANDROID গঠনে উভয় হাতের জন্য জাল ডেটা রয়েছে।
typedef struct XrHandTrackingMeshesANDROID {
XrStructureType type;
void* next;
XrHandMeshANDROID leftHandMesh;
XrHandMeshANDROID rightHandMesh;
} XrHandTrackingMeshesANDROID;
সদস্য বিবরণ
-
type
হল এই কাঠামোর XrStructureType । -
next
হলNULL
বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি। -
leftHandMesh
হল বাম হাতের XrHandMeshANDROID । -
rightHandMesh
হল ডান হাতের XrHandMeshANDROID ।
বৈধ ব্যবহার (অন্তর্নিহিত)
-
XR_ANDROID_hand_mesh
এক্সটেনশনটি অবশ্যই XrHandTrackingMeshesANDROID ব্যবহার করার আগে সক্রিয় করতে হবে -
type
XR_TYPE_HAND_TRACKING_MESHES_ANDROID
হতে হবে -
next
অবশ্যইNULL
বা একটি কাঠামোর চেইনের পরবর্তী কাঠামোর জন্য একটি বৈধ পয়েন্টার হতে হবে -
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
নতুন কাঠামো
- XrSystemHandMeshTracking PropertiesANDROID
- XrHandMeshTrackerCreateInfoANDROID
- XrHandMeshGetInfoANDROID
- XrHandMeshANDROID
- XrHandTrackingMeshesANDROID
নতুন ফাংশন
ইস্যু
সংস্করণ ইতিহাস
- সংশোধন 1, 2024-09-10 (লেভানা চেন)
- প্রাথমিক এক্সটেনশন বর্ণনা