আপনার দৃশ্যে একটি 3D বস্তুর সঠিক স্থান নির্ধারণ করতে একটি হিট-টেস্ট করুন। সঠিক বসানো নিশ্চিত করে যে AR সামগ্রী যথাযথ (আপাত) আকারে রেন্ডার করা হয়েছে।
হিট ফলাফল প্রকার
একটি হিট-টেস্ট চারটি ভিন্ন ধরনের হিট ফলাফল দিতে পারে, যেমনটি নিম্নলিখিত সারণীতে দেখানো হয়েছে।
ফলাফল টাইপ হিট | বর্ণনা | ওরিয়েন্টেশন | কেস ব্যবহার করুন | পদ্ধতি কল |
---|---|---|---|---|
গভীরতা ( DepthPoint ) | একটি বিন্দুর সঠিক গভীরতা এবং অভিযোজন নির্ধারণ করতে সমগ্র দৃশ্য থেকে গভীরতার তথ্য ব্যবহার করে | 3D পৃষ্ঠের লম্ব | একটি নির্বিচারে পৃষ্ঠে একটি ভার্চুয়াল বস্তু রাখুন (শুধু মেঝে এবং দেয়ালে নয়) | এটি কাজ করার জন্য ArDepthMode সক্রিয় করা আবশ্যক।Frame.hitTest(…) , রিটার্ন লিস্টে DepthPoint s চেক করুন |
Plane | একটি বিন্দুর সঠিক গভীরতা এবং অভিযোজন নির্ধারণ করতে অনুভূমিক এবং/অথবা উল্লম্ব পৃষ্ঠে আঘাত করে | 3D পৃষ্ঠের লম্ব | সমতলের সম্পূর্ণ জ্যামিতি ব্যবহার করে একটি বস্তুকে সমতলে (মেঝে বা দেয়াল) রাখুন। অবিলম্বে সঠিক স্কেল প্রয়োজন। ডেপথ হিট-টেস্টের জন্য ফলব্যাক | Frame.hitTest(…) , রিটার্ন লিস্টে Plane জন্য চেক করুন |
বৈশিষ্ট্য বিন্দু ( Point ) | একটি বিন্দুর সঠিক অবস্থান এবং অভিযোজন নির্ধারণ করতে ব্যবহারকারীর ট্যাপের বিন্দুর চারপাশে ভিজ্যুয়াল বৈশিষ্ট্যের উপর নির্ভর করে | 3D পৃষ্ঠের লম্ব | একটি নির্বিচারে পৃষ্ঠে একটি বস্তু রাখুন (শুধু মেঝে এবং দেয়ালে নয়) | Frame.hitTest(…) , রিটার্ন তালিকায় Point s চেক করুন |
ইনস্ট্যান্ট প্লেসমেন্ট ( InstantPlacementPoint ) | কন্টেন্ট রাখার জন্য স্ক্রীন স্পেস ব্যবহার করে। প্রাথমিকভাবে অ্যাপ দ্বারা প্রদত্ত আনুমানিক গভীরতা ব্যবহার করে। অবিলম্বে কাজ করে, কিন্তু ARCore প্রকৃত দৃশ্যের জ্যামিতি নির্ধারণ করতে সক্ষম হলে ভঙ্গি এবং প্রকৃত গভীরতা পরিবর্তিত হবে | +Y নির্দেশ করছে, অভিকর্ষের বিপরীতে | প্লেনের সম্পূর্ণ জ্যামিতি ব্যবহার করে একটি সমতলে (মেঝে বা প্রাচীর) একটি বস্তু রাখুন যেখানে দ্রুত স্থান নির্ধারণ করা গুরুত্বপূর্ণ, এবং অভিজ্ঞতা অজানা প্রাথমিক গভীরতা এবং স্কেল সহ্য করতে পারে | Frame.hitTestInstantPlacement(float, float, float) |
একটি স্ট্যান্ডার্ড হিট-টেস্ট করুন
AR ভিউ থেকে MotionEvent
s পেতে TapHelper
ইউটিলিটি ব্যবহার করে একটি হিট-টেস্ট করতে Frame.hitTest()
এ কল করুন।
জাভা
MotionEvent tap = tapHelper.poll(); if (tap == null) { return; } if (usingInstantPlacement) { // When using Instant Placement, the value in APPROXIMATE_DISTANCE_METERS will determine // how far away the anchor will be placed, relative to the camera's view. List<HitResult> hitResultList = frame.hitTestInstantPlacement(tap.getX(), tap.getY(), APPROXIMATE_DISTANCE_METERS); // Hit-test results using Instant Placement will only have one result of type // InstantPlacementResult. } else { List<HitResult> hitResultList = frame.hitTest(tap); // TODO: Filter hitResultList to find a hit result of interest. }
কোটলিন
val tap = tapHelper.poll() ?: return val hitResultList = if (usingInstantPlacement) { // When using Instant Placement, the value in APPROXIMATE_DISTANCE_METERS will determine // how far away the anchor will be placed, relative to the camera's view. frame.hitTestInstantPlacement(tap.x, tap.y, APPROXIMATE_DISTANCE_METERS) // Hit-test results using Instant Placement will only have one result of type // InstantPlacementResult. } else { frame.hitTest(tap) }
আপনি যে ধরনের বিষয়ে আগ্রহী তার উপর ভিত্তি করে হিট ফলাফল ফিল্টার করুন। উদাহরণস্বরূপ, আপনি যদি DepthPoint
s-এ ফোকাস করতে চান:
জাভা
// Returned hit-test results are sorted by increasing distance from the camera or virtual ray's // origin. // The first hit result is often the most relevant when responding to user input. for (HitResult hit : hitResultList) { Trackable trackable = hit.getTrackable(); if (trackable instanceof DepthPoint) { // Replace with any type of trackable type // Do something with this hit result. For example, create an anchor at this point of // interest. Anchor anchor = hit.createAnchor(); // TODO: Use this anchor in your AR experience. break; } }
কোটলিন
// Returned hit-test results are sorted by increasing distance from the camera or virtual ray's // origin. // The first hit result is often the most relevant when responding to user input. val firstHitResult = hitResultList.firstOrNull { hit -> when (val trackable = hit.trackable!!) { is DepthPoint -> true // Replace with any type of trackable type else -> false } } if (firstHitResult != null) { // Do something with this hit result. For example, create an anchor at this point of interest. val anchor = firstHitResult.createAnchor() // TODO: Use this anchor in your AR experience. }
একটি নির্বিচারে রশ্মি এবং দিকনির্দেশ ব্যবহার করে একটি হিট-পরীক্ষা পরিচালনা করুন
হিট-টেস্টগুলিকে সাধারণত ডিভাইস বা ডিভাইস ক্যামেরা থেকে রশ্মি হিসাবে গণ্য করা হয়, তবে আপনি পরিবর্তে বিশ্ব স্থান স্থানাঙ্কে একটি নির্বিচারে রশ্মি ব্যবহার করে একটি হিট-পরীক্ষা পরিচালনা করতে Frame.hitTest(float[], int, float[], int)
ব্যবহার করতে পারেন একটি স্ক্রীন-স্পেস পয়েন্টের।
হিট ফলাফল ব্যবহার করে একটি অ্যাঙ্কর তৈরি করুন
একবার আপনি একটি হিট ফলাফল পেয়ে গেলে, আপনি আপনার দৃশ্যে AR সামগ্রী স্থাপন করতে ইনপুট হিসাবে এর পোজ ব্যবহার করতে পারেন। একটি নতুন Anchor
তৈরি করতে HitResult.createAnchor()
ব্যবহার করুন, নিশ্চিত করুন যে বিষয়বস্তু হিট ফলাফলের অন্তর্নিহিত Trackable
সাথে সংযুক্ত রয়েছে। উদাহরণস্বরূপ, প্লেনের আঘাতের ফলাফলের জন্য অ্যাঙ্করটি সনাক্ত করা প্লেনের সাথে সংযুক্ত থাকবে, এইভাবে বাস্তব বিশ্বের অংশ বলে মনে হচ্ছে।
এরপর কি
- GitHub-এ
hello_ar_java
এবংhello_ar_kotlin
নমুনা অ্যাপগুলি দেখুন।