ใช้สิ่งปลูกสร้างและภูมิประเทศรอบตัวคุณใน Android NDK (C)

Streetscape Geometry API ให้เรขาคณิตของภูมิประเทศ อาคาร หรือโครงสร้างอื่นๆ ในฉาก เรขาคณิตนี้สามารถใช้สำหรับการบดบัง การแสดงผล หรือการวางเนื้อหา AR ผ่าน Hit-Test API ข้อมูลเรขาคณิตของสภาพแวดล้อมบนท้องถนนได้รับผ่านภาพจาก Google Street View

ตั้งค่า Geospatial API

หากต้องการใช้เรขาคณิตของภาพถนน คุณจะต้องตั้งค่า Geospatial API ในโปรเจ็กต์ ทําตามวิธีการในการเปิดใช้ Geospatial API เพื่อตั้งค่า Geospatial API

เปิดใช้เรขาคณิตของสภาพแวดล้อมถนน

Geospatial API จะรับข้อมูลเรขาคณิตของภาพถนนเมื่อตั้งค่า ArGeospatialMode เป็น ArGeospatialModeEnabled และตั้งค่า ArStreetscapeGeometryMode เป็น ArStreetscapeGeometryModeEnabled

// 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 ประกอบด้วยร่องรอยของอาคารที่ยื่นออกมาด้านบนเป็นพื้นราบ ความสูงของอาคารอาจไม่ถูกต้อง

อาคาร LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 จะมีเรขาคณิตที่ถูกต้องมากขึ้น ผนังและหลังคาตาข่ายจะเข้ากับรูปร่างของอาคารมากกว่า องค์ประกอบขนาดเล็ก เช่น ปล่องไฟหรือช่องระบายอากาศบนหลังคาอาจยังยื่นออกมานอกตาข่าย

ทำความเข้าใจ ArMesh

ArMesh คือเมชรูปหลายเหลี่ยมที่แสดงการจำลองพื้นผิวของเรขาคณิตของภาพถนน ArMesh แต่ละรายการประกอบด้วยบัฟเฟอร์เวิร์กเท็กซ์และบัฟเฟอร์อินเด็กซ์ ดังนี้

แนบเนื้อหา AR กับ ArStreetscapeGeometry

การแนบเนื้อหา AR กับเรขาคณิตของภาพถนนทำได้ 2 วิธีดังนี้

ทำการทดสอบ Hit-Test กับ ArStreetscapeGeometry

ArFrame_hitTest ใช้เพื่อทำการทดสอบการคลิกกับเรขาคณิตของภาพถนนได้ หากพบจุดตัด 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);

เปิดใช้ความชัดลึกเชิงพื้นที่

ความลึกเชิงพื้นที่จะรวมเรขาคณิตของภาพถนนเข้ากับอินพุตจากเซ็นเซอร์ในพื้นที่เพื่อปรับปรุงข้อมูลความลึก เมื่อเปิดใช้ความลึกเชิงพื้นที่ภูมิศาสตร์ ระบบจะแก้ไขความลึกเอาต์พุตและรูปภาพความลึกดิบให้รวมเรขาคณิตของภาพถนนแบบแรสเตอร์ไว้ด้วยนอกเหนือจากความลึกที่สังเกตได้ในพื้นที่ ซึ่งอาจช่วยเพิ่มความแม่นยำของท่าทางโดยใช้ข้อมูลความลึก