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

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

Geospatial API सेट अप करना

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

स्ट्रीटस्केप ज्यामिति की सुविधा चालू करना

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