স্ট্রিটস্কেপ জ্যামিতি 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
একটি বিল্ডিং সম্পর্কে তথ্য রয়েছে:
-
ARStreetscapeGeometry.streetscapeGeometryType
স্ট্রিটস্কেপ জ্যামিতিকে ভূখণ্ড বা বিল্ডিং হিসাবে চিহ্নিত করে। -
ARStreetscapeGeometry.mesh
একটি বহুভুজMesh
পান যা এই ভূখণ্ড বা ভবনের সাথে মিলে যায়। -
ARStreetscapeGeometry.quality
জাল ডেটার গুণমান সরবরাহ করে। সিটিজিএমএল 2.0 স্ট্যান্ডার্ডে বিশদ স্তরগুলি বর্ণনা করা হয়েছে।
বিল্ডিং 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);
}
}
ভূ-স্থানিক গভীরতা সক্ষম করুন
ভূ-স্থানিক গভীরতা গভীরতার ডেটা উন্নত করতে স্থানীয় সেন্সর ইনপুটের সাথে স্ট্রিটস্কেপ জ্যামিতিকে একত্রিত করে। যখন ভূ-স্থানিক গভীরতা সক্ষম করা হয়, আউটপুট গভীরতা এবং কাঁচা গভীরতার চিত্রগুলিকে স্থানীয়ভাবে পর্যবেক্ষণ করা গভীরতার পাশাপাশি রাস্টারাইজড স্ট্রিটস্কেপ জ্যামিতি অন্তর্ভুক্ত করার জন্য পরিবর্তন করা হয়। এটি গভীরতা ব্যবহার করে ভঙ্গির নির্ভুলতা উন্নত করতে পারে।