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
มีข้อมูลเกี่ยวกับอาคาร ดังนี้
-
ArStreetscapeGeometry_getType()
ระบุ StreetscapeGeometry ว่าเป็นภูมิประเทศหรืออาคาร -
ArStreetscapeGeometry_acquireMesh()
รับรูปหลายเหลี่ยมArMesh
ที่สอดคล้องกับภูมิประเทศหรืออาคารนี้ -
ArStreetscapeGeometry_getMeshPose()
อธิบายจุดเริ่มต้นของเรขาคณิต จุดทั้งหมดในArMesh
ควรเปลี่ยนรูปแบบโดยArStreetscapeGeometry_getMeshPose()
-
ArStreetscapeGeometry_getQuality()
แสดงคุณภาพของข้อมูลเมช ระดับรายละเอียดอธิบายไว้ในมาตรฐาน CityGML 2.0
LOD 1 ของอาคาร
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
ประกอบด้วยร่องรอยของอาคารที่ยื่นออกมาด้านบนเป็นพื้นราบ ความสูงของอาคารอาจไม่ถูกต้อง
อาคาร LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
จะมีเรขาคณิตที่ถูกต้องมากขึ้น ผนังและหลังคาตาข่ายจะเข้ากับรูปร่างของอาคารมากกว่า องค์ประกอบขนาดเล็ก เช่น ปล่องไฟหรือช่องระบายอากาศบนหลังคาอาจยังยื่นออกมานอกตาข่าย
ทำความเข้าใจ ArMesh
ArMesh
คือเมชรูปหลายเหลี่ยมที่แสดงการจำลองพื้นผิวของเรขาคณิตของภาพถนน
ArMesh
แต่ละรายการประกอบด้วยบัฟเฟอร์เวิร์กเท็กซ์และบัฟเฟอร์อินเด็กซ์ ดังนี้
ArMesh_getVertexListSize()
ดึงข้อมูลจํานวนจุดยอดในเมชนี้ArMesh_getVertexList()
รับตําแหน่งที่ต่อเชื่อมกันของจุดยอดของเมชในพิกัดที่สัมพันธ์กับArStreetscapeGeometry_getMeshPose()
ArMesh_getIndexListSize()
ดึงข้อมูลจํานวนอินเด็กซ์ในเมชนี้ArMesh_getIndexList()
รับดัชนีของจุดยอดที่ประกอบกันเป็นใบหน้า
แนบเนื้อหา AR กับ ArStreetscapeGeometry
การแนบเนื้อหา AR กับเรขาคณิตของภาพถนนทำได้ 2 วิธีดังนี้
- เปิดใช้ความลึกเชิงพื้นที่ และใช้การทดสอบการคลิกเพื่อหาจุดที่ลึกที่สุด ซึ่งเป็นวิธีที่แนะนำและง่ายกว่า
- ใช้
ArTrackable_acquireNewAnchor()
เพื่อสร้างจุดยึดในท่าทางที่กำหนดซึ่งแนบอยู่กับArStreetscapeGeometry
หมุดนี้จะรับสถานะการติดตามมาจากArStreetscapeGeometry
หลัก
ทำการทดสอบ 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);
เปิดใช้ความชัดลึกเชิงพื้นที่
ความลึกเชิงพื้นที่จะรวมเรขาคณิตของภาพถนนเข้ากับอินพุตจากเซ็นเซอร์ในพื้นที่เพื่อปรับปรุงข้อมูลความลึก เมื่อเปิดใช้ความลึกเชิงพื้นที่ภูมิศาสตร์ ระบบจะแก้ไขความลึกเอาต์พุตและรูปภาพความลึกดิบให้รวมเรขาคณิตของภาพถนนแบบแรสเตอร์ไว้ด้วยนอกเหนือจากความลึกที่สังเกตได้ในพื้นที่ ซึ่งอาจช่วยเพิ่มความแม่นยำของท่าทางโดยใช้ข้อมูลความลึก