अपने Android एनडीके ऐप्लिकेशन में हिट-टेस्ट करना

अपने सीन में किसी 3D ऑब्जेक्ट की सही जगह तय करने के लिए, हिट-टेस्ट करें. सही प्लेसमेंट यह पक्का करता है कि एआर कॉन्टेंट को उचित (साफ़ तौर पर) आकार में रेंडर किया गया हो.

हिट नतीजे के टाइप

हिट-टेस्ट से चार अलग-अलग तरह के हिट नतीजे मिल सकते हैं, जैसा कि नीचे दी गई टेबल में दिखाया गया है.

हिट के नतीजे का टाइप ब्यौरा ओरिएंटेशन इस्तेमाल के बारे में जानकारी मेथड कॉल
गहराई (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 पर फ़ोकस करना है:

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 का इस्तेमाल करने का विकल्प है.

हिट के नतीजे में ऐंकर अटैच करें

हिट नतीजा मिलने के बाद, अपने सीन में एआर (ऑगमेंटेड रिएलिटी) कॉन्टेंट डालने के लिए, इनपुट के तौर पर उसके पोज़ का इस्तेमाल किया जा सकता है. हिट लोकेशन पर नया एंकर बनाने के लिए, ArHitResult_acquireNewAnchor का इस्तेमाल करें.

आगे क्या होगा

  • GitHub पर hello_ar_c सैंपल ऐप्लिकेशन देखें.