Android NDK (C) पर अपने आस-पास की इमारतों और इलाके की जानकारी का इस्तेमाल करना

Streetscape Geometry API किसी सीन में इलाके, इमारतों या अन्य स्ट्रक्चर की ज्यामिति उपलब्ध कराता है. हिट-टेस्ट एपीआई की मदद से, ज्यामिति का इस्तेमाल ऑब्स्क्यूरेशन, रेंडरिंग या एआर कॉन्टेंट को प्लेस करने के लिए किया जा सकता है. Streetscape ज्यामिति डेटा, Google Street View की तस्वीरों के ज़रिए लिया जाता है.

Geospatial API को सेट अप करना

Streetscape Geometry का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में Geospatial API को सेट अप करना होगा. जियोस्पेशियल एपीआई सेट अप करने के लिए, जियोस्पेशियल एपीआई चालू करने के निर्देशों का पालन करें.

Streetscape ज्यामिति चालू करें

जब ArGeospatialMode को ArGeospatialModeEnabled और ArStreetscapeGeometryMode को ArStreetscapeGeometryModeEnabled पर सेट किया जाता है, तब Geospatial API, Streetscape Geometry का डेटा हासिल करता है.

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Enable the Geospatial API.
ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Enable Streetscape Geometry.
ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Release config resources.
ArConfig_destroy(ar_config);

ARCore सेशन में Streetscape ज्यामिति पाएं

नतीजों को फ़िल्टर करने के लिए, ArSession_getAllTrackables() का इस्तेमाल करें. इसके बाद, AR_TRACKABLE_STREETSCAPE_GEOMETRY का इस्तेमाल करें.

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

ArStreetscapeGeometry के बारे में जानकारी

ArStreetscapeGeometry में किसी बिल्डिंग की जानकारी शामिल है:

बिल्डिंग एलओडी 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 में, इमारत के फ़ुटप्रिंट को ऊपर की ओर एक सपाट टॉप तक एक्सट्रूज़न किया जाता है. इमारत की ऊंचाई गलत हो सकती है.

बिल्डिंग का एलओडी 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 में बेहतर क्वालिटी की ज्यामिति होगी. मेश की दीवारें और छतें, इमारत के आकार से काफ़ी हद तक मेल खाएगी. चिमनी या छत के वेंट जैसी छोटी चीज़ें, अब भी मेश के बाहर दिख सकती हैं.

ArMesh के बारे में जानकारी

ArMesh एक पॉलीगॉन मेश है, जो Streetscape ज्यामिति का सरफ़ेस रीकंस्ट्रक्शन दिखाता है. हर ArMesh में एक वर्टेक्स बफ़र और इंडेक्स बफ़र होता है:

  • ArMesh_getVertexListSize()
    इस मेश में वर्टेक्स की संख्या की जानकारी हासिल करता है.
  • ArMesh_getVertexList()
    ArStreetscapeGeometry_getMeshPose() के हिसाब से निर्देशांक में, मेश वर्टिसेस की जोड़ी गई पोज़िशन पाएं.
  • ArMesh_getIndexListSize()
    इस मेश में इंडेक्स की संख्या दिखाता है.
  • ArMesh_getIndexList()
    चेहरे को बनाने वाले शीर्षों के इंडेक्स पाएं.

ArStreetscapeGeometry में एआर (ऑगमेंटेड रिएलिटी) कॉन्टेंट अटैच करें

Streetscape Geometry में एआर कॉन्टेंट अटैच करने के दो तरीके हैं:

ArStreetscapeGeometry के लिए हिट-टेस्ट करना

ArFrame_hitTest का इस्तेमाल, Streetscape Geometry के हिसाब से हिट-टेस्ट करने के लिए किया जा सकता है. अगर इंटरसेक्शन मिलते हैं, तो ArHitResult में हिट की गई जगह के बारे में पोज़ की जानकारी होती है. साथ ही, उस ArStreetscapeGeometry का रेफ़रंस भी होता है जिसे हिट किया गया था. इस स्ट्रीटस्केप ज्यामिति को ArTrackable_acquireNewAnchor() को पास किया जा सकता है, ताकि उससे जुड़ा ऐंकर बनाया जा सके.

ArHitResultList *hit_result_list = NULL;
ArHitResult *hit_result = NULL;
ArHitResultList_create(ar_session, &hit_result_list);
ArHitResult_create(ar_session, &hit_result);

ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list);
ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result);

ArAnchor *out_anchor = NULL;
ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor);
CHECK(status == AR_SUCCESS);

जियोस्पेशियल डेप्थ की सुविधा चालू करें

जियोस्पेशियल डेप्थ में स्ट्रीटस्केप ज्यामिति शामिल है इसमें स्थानीय सेंसर इनपुट इस्तेमाल किया जाता है, ताकि डेप्थ डेटा को बेहतर बनाया जा सके. भौगोलिक डेटा के आधार पर गहराई का पता लगाने की सुविधा चालू होने पर, आउटपुट की गहराई और रॉ डेप्थ इमेज में बदलाव किया जाता है. ऐसा इसलिए किया जाता है, ताकि स्थानीय तौर पर गहराई का पता लगाने के साथ-साथ, रेस्टर की गई Streetscape ज्यामिति को भी शामिल किया जा सके. इससे डेप्थ का इस्तेमाल करके, पोज़ को ज़्यादा सटीक बनाने में मदद मिल सकती है.