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

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

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

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

स्ट्रीटस्केप जियोमेट्री चालू करें

जब ArGeospatialMode को ArGeospatialModeEnabled पर और ArStreetscapeGeometryMode को ArStreetscapeGeometryModeEnabled पर सेट किया जाता है, तो Geospatial API, Streetscape की ज्यामिति का डेटा इकट्ठा करता है.

// 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 सत्र में स्ट्रीटस्केप ज्यामिति पाएं

नतीजों को फ़िल्टर करने के लिए, 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 में किसी इमारत की जानकारी है:

बिल्डिंग LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 में, इमारत के पैरों के निशान होते हैं, जिन्हें सपाट ऊपरी हिस्से से, ऊपर की ओर निकाला जाता है. इमारत की ऊंचाई गलत हो सकती है.

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

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

ArMesh को समझें

ArMesh एक पॉलीगॉन मेश है, जो स्ट्रीटस्केप जियोमेट्री की सतह को फिर से बनाने का तरीका दिखाता है. हर 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);

जियोस्पेशियल गहराई चालू करें

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