আপনার Android NDK অ্যাপে হিট-টেস্ট করুন

আপনার দৃশ্যে একটি 3D বস্তুর সঠিক স্থান নির্ধারণ করতে একটি হিট-টেস্ট করুন। সঠিক বসানো নিশ্চিত করে যে AR সামগ্রী যথাযথ (আপাত) আকারে রেন্ডার করা হয়েছে।

হিট ফলাফল প্রকার

একটি হিট-টেস্ট চারটি ভিন্ন ধরনের হিট ফলাফল দিতে পারে, যেমনটি নিম্নলিখিত সারণীতে দেখানো হয়েছে।

ফলাফল টাইপ হিট বর্ণনা ওরিয়েন্টেশন ব্যবহারের ক্ষেত্রে পদ্ধতি কল
গভীরতা ( AR_TRACKABLE_DEPTH_POINT ) একটি বিন্দুর সঠিক গভীরতা এবং অভিযোজন নির্ধারণ করতে সমগ্র দৃশ্য থেকে গভীরতার তথ্য ব্যবহার করে 3D পৃষ্ঠের লম্ব একটি নির্বিচারে পৃষ্ঠে একটি ভার্চুয়াল বস্তু রাখুন (শুধু মেঝে এবং দেয়ালে নয়) এটি কাজ করার জন্য ArDepthMode সক্রিয় করা আবশ্যক।

ArFrame_hitTest , রিটার্ন লিস্টে ArDepthPoint এর জন্য চেক করুন
প্লেন ( AR_TRACKABLE_PLANE ) একটি বিন্দুর সঠিক গভীরতা এবং অভিযোজন নির্ধারণ করতে অনুভূমিক এবং/অথবা উল্লম্ব পৃষ্ঠে আঘাত করে 3D পৃষ্ঠের লম্ব সমতলের সম্পূর্ণ জ্যামিতি ব্যবহার করে একটি বস্তুকে সমতলে (মেঝে বা দেয়াল) রাখুন। অবিলম্বে সঠিক স্কেল প্রয়োজন। ডেপথ হিট-টেস্টের জন্য ফলব্যাক ArFrame_hitTest , রিটার্ন লিস্টে ArPlane এর জন্য চেক করুন
ফিচার পয়েন্ট ( AR_TRACKABLE_POINT ) একটি বিন্দুর সঠিক অবস্থান এবং অভিযোজন নির্ধারণ করতে ব্যবহারকারীর ট্যাপের বিন্দুর চারপাশে ভিজ্যুয়াল বৈশিষ্ট্যের উপর নির্ভর করে 3D পৃষ্ঠের লম্ব একটি নির্বিচারে পৃষ্ঠে একটি বস্তু রাখুন (শুধু মেঝে এবং দেয়ালে নয়) ArFrame_hitTest , রিটার্ন লিস্টে ArPoint এর জন্য চেক করুন
ইনস্ট্যান্ট প্লেসমেন্ট ( AR_TRACKABLE_INSTANT_PLACEMENT_POINT ) কন্টেন্ট রাখার জন্য স্ক্রীন স্পেস ব্যবহার করে। প্রাথমিকভাবে অ্যাপ দ্বারা প্রদত্ত আনুমানিক গভীরতা ব্যবহার করে। অবিলম্বে কাজ করে, কিন্তু ARCore প্রকৃত দৃশ্যের জ্যামিতি নির্ধারণ করতে সক্ষম হলে ভঙ্গি এবং প্রকৃত গভীরতা পরিবর্তিত হবে +Y নির্দেশ করছে, অভিকর্ষের বিপরীতে প্লেনের সম্পূর্ণ জ্যামিতি ব্যবহার করে একটি সমতলে (মেঝে বা প্রাচীর) একটি বস্তু রাখুন যেখানে দ্রুত স্থান নির্ধারণ করা গুরুত্বপূর্ণ, এবং অভিজ্ঞতা অজানা প্রাথমিক গভীরতা এবং স্কেল সহ্য করতে পারে ArFrame_hitTestInstantPlacement

একটি স্ট্যান্ডার্ড হিট-টেস্ট করুন

একটি হিট পরীক্ষা করতে ArFrame_hitTest কল করুন।

ArHitResultList* hit_result_list = NULL;
ArHitResultList_create(ar_session, &hit_result_list);
CHECK(hit_result_list);
if (is_instant_placement_enabled) {
  ArFrame_hitTestInstantPlacement(ar_session, ar_frame, x, y,
                                  k_approximate_distance_meters,
                                  hit_result_list);
} else {
  ArFrame_hitTest(ar_session, ar_frame, x, y, hit_result_list);
}

আপনি যে ধরনের বিষয়ে আগ্রহী তার উপর ভিত্তি করে হিট ফলাফল ফিল্টার করুন। উদাহরণস্বরূপ, আপনি যদি ArPlane s-এ ফোকাস করতে চান:

int32_t hit_result_list_size = 0;
ArHitResultList_getSize(ar_session, hit_result_list, &hit_result_list_size);

// 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.
ArHitResult* ar_hit_result = NULL;
for (int32_t i = 0; i < hit_result_list_size; ++i) {
  ArHitResult* ar_hit = NULL;
  ArHitResult_create(ar_session, &ar_hit);
  ArHitResultList_getItem(ar_session, hit_result_list, i, ar_hit);

  if (ar_hit == NULL) {
    LOGE("No item was hit.");
    return;
  }

  ArTrackable* ar_trackable = NULL;
  ArHitResult_acquireTrackable(ar_session, ar_hit, &ar_trackable);
  ArTrackableType ar_trackable_type = AR_TRACKABLE_NOT_VALID;
  ArTrackable_getType(ar_session, ar_trackable, &ar_trackable_type);
  // Creates an anchor if a plane was hit.
  if (ar_trackable_type == AR_TRACKABLE_PLANE) {
    // Do something with this hit result. For example, create an anchor at
    // this point of interest.
    ArAnchor* anchor = NULL;
    ArHitResult_acquireNewAnchor(ar_session, ar_hit, &anchor);

    // TODO: Use this anchor in your AR experience.

    ArAnchor_release(anchor);
    ArHitResult_destroy(ar_hit);
    ArTrackable_release(ar_trackable);
    break;
  }
  ArHitResult_destroy(ar_hit);
  ArTrackable_release(ar_trackable);
}
ArHitResultList_destroy(hit_result_list);

একটি নির্বিচারে রশ্মি এবং দিকনির্দেশ ব্যবহার করে একটি হিট-পরীক্ষা পরিচালনা করুন

হিট-টেস্টগুলিকে সাধারণত ডিভাইস বা ডিভাইস ক্যামেরা থেকে রশ্মি হিসাবে গণ্য করা হয়, তবে আপনি স্ক্রীন-স্পেস পয়েন্টের পরিবর্তে বিশ্ব স্পেস কোঅর্ডিনেটে একটি নির্বিচারে রশ্মি ব্যবহার করে একটি হিট-পরীক্ষা পরিচালনা করতে ArFrame_hitTestRay ব্যবহার করতে পারেন।

একটি HitResult একটি অ্যাঙ্কর সংযুক্ত করুন

একবার আপনি একটি হিট ফলাফল পেয়ে গেলে, আপনি আপনার দৃশ্যে AR সামগ্রী স্থাপন করতে ইনপুট হিসাবে এর পোজ ব্যবহার করতে পারেন। হিট অবস্থানে একটি নতুন অ্যাঙ্কর তৈরি করতে ArHitResult_acquireNewAnchor ব্যবহার করুন।

এরপর কি

  • GitHub-এ hello_ar_c নমুনা অ্যাপটি দেখুন।