জেটপ্যাক এক্সআর-এর জন্য ARCore ব্যবহারকারীর শনাক্ত করা হাত সম্পর্কে তথ্য প্রদান করতে পারে এবং হাত এবং তাদের সংযুক্ত জয়েন্টগুলির জন্য পোজ তথ্য দেয়। এই হ্যান্ড ডেটা ব্যবহারকারীর হাতে সত্তা এবং মডেল সংযুক্ত করতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, একটি টুল মেনু:
Jetpack XR সেশনের জন্য একটি ARCore তৈরি করুন
Jetpack XR সেশনের জন্য ARCore-এর মাধ্যমে হাতের তথ্য অ্যাক্সেস করুন। একটি Session
পাওয়ার জন্য একটি সেশনের জীবনচক্র বুঝতে দেখুন।
হাতের ডেটা পুনরুদ্ধার করুন
হাতের ডেটা বাম এবং ডান হাতের জন্য আলাদাভাবে উপলব্ধ। প্রতিটি জয়েন্টের জন্য পোজ পজিশন অ্যাক্সেস করতে প্রতিটি হাতের state
ব্যবহার করুন:
Hand.left(session).state.collect { // or Hand.right(session)
// Hand state has been updated.
// Use the state of hand joints to update an entity's position.
}
হাতের নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
-
isActive
: হাত ট্র্যাক করা হচ্ছে কিনা। handJoints
: পোজ করার জন্য হাতের জয়েন্টগুলির একটি মানচিত্র। হাতের জয়েন্টের ভঙ্গি OpenXR মান দ্বারা নির্দিষ্ট করা হয়।
আপনার অ্যাপে হাতের ডেটা ব্যবহার করুন
ব্যবহারকারীর হাতের জয়েন্টগুলির অবস্থানগুলি ব্যবহারকারীর হাতে 3D বস্তুগুলিকে নোঙ্গর করতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, বাম হাতের তালুতে একটি মডেল সংযুক্ত করতে:
Hand.left(session)?.state?.collect { leftHandState ->
val palmPose = leftHandState.handJoints[HandJointType.PALM] ?: return@collect
// the down direction points in the same direction as the palm
val angle = Vector3.angleBetween(palmPose.rotation * Vector3.Down, Vector3.Up)
palmEntity.setHidden(angle > Math.toRadians(40.0))
val transformedPose =
session.perceptionSpace.transformPoseTo(
palmPose,
session.activitySpace,
)
val newPosition = transformedPose.translation + transformedPose.down*0.05f
palmEntity.setPose(Pose(newPosition, transformedPose.rotation))
}
অথবা আপনার ডান হাতের তর্জনীর ডগায় একটি মডেল সংযুক্ত করতে:
Hand.right(session)?.state?.collect { rightHandState ->
val tipPose = rightHandState.handJoints[HandJointType.INDEX_TIP] ?: return@collect
// the forward direction points towards the finger tip.
val angle = Vector3.angleBetween(tipPose.rotation * Vector3.Forward, Vector3.Up)
indexEntity.setHidden(angle > Math.toRadians(40.0))
val transformedPose =
session.perceptionSpace.transformPoseTo(
tipPose,
session.activitySpace,
)
val position = transformedPose.translation + transformedPose.forward * 0.03f
val rotation = Quaternion.fromLookTowards(transformedPose.up, Vector3.Up)
indexEntity.setPose(Pose(position, rotation))
}