अपने 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 सैंपल ऐप्लिकेशन देखें.