ইউনিটিতে আপনার চারপাশের ভবন এবং ভূখণ্ড ব্যবহার করুন

স্ট্রিটস্কেপ জ্যামিতি API একটি দৃশ্যে ভূখণ্ড, ভবন বা অন্যান্য কাঠামোর জ্যামিতি প্রদান করে। জ্যামিতিটি হিট-টেস্ট API-এর মাধ্যমে আটকানো, রেন্ডারিং বা AR সামগ্রী রাখার জন্য ব্যবহার করা যেতে পারে। স্ট্রিটস্কেপ জ্যামিতি ডেটা Google রাস্তার দৃশ্য চিত্রের মাধ্যমে প্রাপ্ত করা হয়।

নমুনা চেষ্টা করুন

জিওস্পেশিয়াল নমুনা অ্যাপটি দেখায় কিভাবে স্ট্রিটস্কেপ জ্যামিতি পাওয়া যায় এবং রেন্ডার করা যায়।

Geospatial API সেট আপ করুন

স্ট্রিটস্কেপ জ্যামিতি ব্যবহার করতে, আপনাকে আপনার প্রকল্পে জিওস্পেশিয়াল API সেট আপ করতে হবে। জিওস্পেশিয়াল এপিআই সেট আপ করতে জিওস্পেশিয়াল এপিআই সক্ষম করার নির্দেশাবলী অনুসরণ করুন।

স্ট্রিটস্কেপ জ্যামিতি সক্ষম করুন

Geospatial API Streetscape জ্যামিতি ডেটা পায় যখন GeospatialMode GeospatialMode.Enabled এ সেট করা থাকে এবং StreetscapeGeometryMode StreetscapeGeometryMode.Enabled এ সেট করা হয়।

একটি ARCore সেশনে স্ট্রিটস্কেপ জ্যামিতি পান

একটি GameObject একটি ARStreetscapeGeometryManager উপাদান যোগ করুন। যখন স্ট্রিটস্কেপ জ্যামিতি যোগ করা হয়, আপডেট করা হয় বা সরানো হয়, তখন 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 হল একটি বহুভুজ জাল যা স্ট্রিটস্কেপ জ্যামিতির একটি পৃষ্ঠ পুনর্গঠনের প্রতিনিধিত্ব করে। Mesh এবং MeshRenderer দেখুন। নোট করুন যে স্বাভাবিকগুলি ডিফল্টরূপে গণনা করা হয় না; তাদের গণনা করতে Mesh.RecalculateNormals() দেখুন।

একটি ARStreetscapeGeometry AR সামগ্রী সংযুক্ত করুন

ARAnchorManager.AddAnchor() ব্যবহার করুন ARStreetscapeGeometry.mesh এ শীর্ষবিন্দুর কাছাকাছি একটি প্রদত্ত ভঙ্গিতে একটি অ্যাঙ্কর তৈরি করতে। এই অ্যাঙ্করটি অভিভাবক ARStreetscapeGeometry থেকে এর ট্র্যাকিং অবস্থার উত্তরাধিকারী হবে।

ARStreetscapeGeometry বিরুদ্ধে একটি হিট-পরীক্ষা করুন

ARRaycastManagerExtensions.RaycastStreetscapeGeometry Streetscape জ্যামিতির বিরুদ্ধে হিট-টেস্ট করতে ব্যবহার করা যেতে পারে। যদি ছেদগুলি পাওয়া যায়, XRRaycastHit হিট অবস্থান সম্পর্কে পোজ তথ্যের পাশাপাশি ARStreetscapeGeometry এর একটি রেফারেন্স রয়েছে যা হিট হয়েছিল৷ এই 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);
  }
}

ভূ-স্থানিক গভীরতা সক্ষম করুন

ভূ-স্থানিক গভীরতা গভীরতার ডেটা উন্নত করতে স্থানীয় সেন্সর ইনপুটের সাথে স্ট্রিটস্কেপ জ্যামিতিকে একত্রিত করে। যখন ভূ-স্থানিক গভীরতা সক্ষম করা হয়, আউটপুট গভীরতা এবং কাঁচা গভীরতার চিত্রগুলিকে স্থানীয়ভাবে পর্যবেক্ষণ করা গভীরতার পাশাপাশি রাস্টারাইজড স্ট্রিটস্কেপ জ্যামিতি অন্তর্ভুক্ত করার জন্য পরিবর্তন করা হয়। এটি গভীরতা ব্যবহার করে ভঙ্গির নির্ভুলতা উন্নত করতে পারে।