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

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

ดูตัวอย่าง

แอปตัวอย่างภูมิสารสนเทศ สาธิตวิธีรับและแสดงผล Streetscape Geometries

ตั้งค่า Geospatial API

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

เปิดใช้ Streetscape Geometry

API ทางภูมิศาสตร์จะรับข้อมูลเรขาคณิตของ Streetscape เมื่อตั้งค่า GeospatialMode เป็น GeospatialMode.Enabled และตั้งค่า StreetscapeGeometryMode เป็น StreetscapeGeometryMode.Enabled

รับเรขาคณิตของ Streetscape ในเซสชัน ARCore

เพิ่มคอมโพเนนต์ ARStreetscapeGeometryManager ลงใน GameObject วันและเวลา มีการเพิ่ม อัปเดต หรือนำเรขาคณิตของ Streetscape ออก ระบบจะทริกเกอร์เหตุการณ์ ARStreetscapeGeometryManager.StreetscapeGeometriesChanged

public Material streetscapeGeometryMaterial;

List<ARStreetscapeGeometry> _addedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _updatedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _removedStreetscapeGeometries = new List<ARStreetscapeGeometry>();

public void OnEnable()
{
    StreetscapeGeometryManager.StreetscapeGeometriesChanged +=
        GetStreetscapeGeometry;
}

public void Update() {
  foreach (ARStreetscapeGeometry streetscapegeometry in _addedStreetscapeGeometries)
  {
    GameObject renderObject = new GameObject(
       "StreetscapeGeometryMesh", typeof(MeshFilter), typeof(MeshRenderer));

    if (renderObject)
    {
        renderObject.transform.position = streetscapegeometry.pose.position;
        renderObject.transform.rotation = streetscapegeometry.pose.rotation;
        renderObject.GetComponent<MeshFilter>().mesh = streetscapegeometry.mesh;
        renderObject.GetComponent<MeshRenderer>().material = streetscapeGeometryMaterial;
    }
  }
}

public void OnDisable()
{
    StreetscapeGeometryManager.StreetscapeGeometriesChanged -=
        GetStreetscapeGeometry;
}

private void GetStreetscapeGeometry(ARStreetscapeGeometriesChangedEventArgs eventArgs)
{
    _addedStreetscapeGeometries = eventArgs.Added;
    _updatedStreetscapeGeometries = eventArgs.Updated;
    _removedStreetscapeGeometries = eventArgs.Removed;
}

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

ARStreetscapeGeometry มีข้อมูลเกี่ยวกับอาคาร ดังนี้

อาคาร LOD 1

BuildingLOD1 ประกอบด้วยฟุตพริ้นท์ของอาคารที่ยื่นสูงขึ้นไปยังด้านแบน ความสูงของอาคารอาจไม่ถูกต้อง

อาคาร LOD 2

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

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

Mesh เป็นโครงข่ายรูปหลายเหลี่ยมที่แสดงการสร้างพื้นผิวใหม่ของเรขาคณิตใน Streetscape โปรดดู Mesh และ MeshRenderer โปรดทราบว่าค่าปกติไม่ได้คำนวณโดยค่าเริ่มต้น ดู Mesh.RecalculateNormals() เพื่อคำนวณ

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

ใช้ ARAnchorManager.AddAnchor() เพื่อสร้าง Anchor ในท่าทางที่กำหนดใกล้กับจุดยอดมุมใน ARStreetscapeGeometry.mesh Anchor นี้จะรับสถานะการติดตามมาจาก ARStreetscapeGeometry ระดับบน

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

คุณใช้ ARRaycastManagerExtensions.RaycastStreetscapeGeometry เพื่อทดสอบกับเรขาคณิตของ Streetscape ได้ หากพบทางแยก XRRaycastHit จะมีข้อมูลตำแหน่งเกี่ยวกับตำแหน่งของ Hit รวมถึงการอ้างอิง ARStreetscapeGeometry ที่เกิด Hit เรขาคณิตของ Streetscape สามารถส่งผ่านไปยัง ARAnchorManager.AddAnchor() เพื่อสร้างหมุดที่ติดอยู่

Vector2 screenTapPosition = Input.GetTouch(0).position;
List<XRRaycastHit> hitResults = new List<XRRaycastHit>();
if (RaycastManager.RaycastStreetscapeGeometry(screenTapPosition, ref hitResults)){
  ARStreetscapeGeometry streetscapegeometry =
      StreetscapeGeometryManager.GetStreetscapeGeometry(hitResults[0].trackableId);
  if (streetscapegeometry != null)
  {
      ARAnchor anchor = StreetscapeGeometryManager.AttachAnchor(streetscapegeometry, hitResults[0].pose);
  }
}

เปิดใช้ความลึกของภูมิสารสนเทศ

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