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

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

ตั้งค่า Geospatial API

หากต้องการใช้ Streetscape Geometry คุณจะต้องตั้งค่า Geospatial API ในโครงการ ทำตามคำแนะนำในการเปิดใช้ Geospatial API เพื่อตั้งค่า Geospatial API

เปิดใช้เรขาคณิตใน Streetscape

Geospatial API รับข้อมูล Streetscape Geometry เมื่อตั้งค่า 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);

รับเรขาคณิต Streetscape ในเซสชัน 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 คือตารางรูปหลายเหลี่ยมแสดงการสร้างพื้นผิวของเรขาคณิตใน Streetscape ArMesh แต่ละรายการจะมีบัฟเฟอร์จุดยอดและบัฟเฟอร์ดัชนีดังนี้

แนบเนื้อหา AR ไปยัง ArStreetscapeGeometry

การแนบเนื้อหา AR กับ Streetscape Geometry ทำได้ 2 วิธีดังนี้

  • เปิดใช้ Geospatial Depth และใช้ Depth Hit-test ซึ่งเป็นวิธีที่แนะนำซึ่งทำได้ง่ายกว่า
  • ใช้ ArTrackable_acquireNewAnchor() เพื่อสร้างแท็ก Anchor ในท่าที่กำหนดไว้และแนบไว้กับ ArStreetscapeGeometry โฆษณา Anchor นี้จะรับช่วงสถานะการติดตามจาก ArStreetscapeGeometry ระดับบนสุด

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

สามารถใช้ ArFrame_hitTest เพื่อทดสอบ Hit กับเรขาคณิตของ Streetscape ได้ หากพบทางแยก ArHitResult จะมีข้อมูลท่าทางเกี่ยวกับตำแหน่งของ Hit รวมถึงการอ้างอิง ArStreetscapeGeometry ที่ชนอยู่ คุณสามารถส่งเรขาคณิตของ Streetscape นี้ไปยัง ArTrackable_acquireNewAnchor() เพื่อสร้าง Anchor ที่แนบกับภาพได้

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 เข้ากับอินพุตเซ็นเซอร์ในเครื่องเพื่อปรับปรุงข้อมูลความลึก เมื่อเปิดใช้ Geospatial Depth อยู่ ระบบจะแก้ไขภาพความลึกของภาพและ RAW ของเอาต์พุตให้รวมเรขาคณิต Streetscape แบบแรสเตอร์นอกเหนือจากความลึกที่สังเกตได้ในพื้นที่ การดำเนินการนี้อาจปรับปรุงความแม่นยำของท่าทางโดยใช้ความลึก