توفر واجهات برمجة تطبيقات Streetscape Geometry API هندسة التضاريس أو المباني أو البنى الأخرى في المشهد. يمكن استخدام الأبعاد الهندسية للتظليل أو العرض أو وضع محتوى الواقع المعزّز من خلال واجهات برمجة تطبيقات اختبار النتائج. يتم الحصول على بيانات هندسة صور الشارع من خلال صور "التجوّل الافتراضي من Google".
تجربة النموذج
يوضح نموذج تطبيق المواقع الجغرافية المكانية كيفية الحصول على أشكال هندسة صور الشارع وعرضها.
إعداد واجهة برمجة التطبيقات الجغرافية المكانية
لاستخدام Streetscape Geometry، يجب إعداد واجهة برمجة التطبيقات Geospatial API في مشروعك. اتّبِع التعليمات بشأن تفعيل واجهة برمجة التطبيقات Geospatial API لإعداد واجهة برمجة التطبيقات Geospatial.
تفعيل هندسة صورة الشارع
تحصل واجهة برمجة التطبيقات الجغرافية المكانية على بيانات "هندسة التجوّل الافتراضي" عند ضبط GeospatialMode
على GeospatialMode.Enabled
وضبط StreetscapeGeometryMode
على StreetscapeGeometryMode.Enabled
.
احصل على هندسة Streetscape Geometry في جلسة ARCore
يمكنك إضافة مكوِّنARStreetscapeGeometryManager
إلى GameObject
. عند إضافة أشكال هندسية لـ "التجوّل الافتراضي" أو تعديلها أو إزالتها، يتم بدء حدث 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
تحدِّد ميزة StreetscapeGeometry كتضاريس أو كمبنى. -
ARStreetscapeGeometry.mesh
يجب الحصول على مضلّعMesh
يتطابق مع هذه التضاريس أو المبنى. -
ARStreetscapeGeometry.quality
يتم توفير جودة بيانات الشبكة المتداخلة. يتم توضيح مستويات التفاصيل في معيار CityGML 2.0.
مبنى LOD 1
تتألف BuildingLOD1
من آثار أقدام المباني المنبثقة إلى أعلى مسطّحة. قد تكون الارتفاعات غير دقيقة في المباني.
مبنى LOD 2
BuildingLOD2
سيكون له شكل هندسي عالي الدقة. تتطابق الجدران والأسطح المتداخلة بشكل وثيق مع شكل المبنى. وقد تبرز العناصر الأصغر حجمًا خارج الشبكة، مثل المداخن أو فتحات السقف.
فهم Mesh
Mesh
عبارة عن شبكة مضلعة تمثل إعادة بناء سطحي لهندسة صورة الشارع.
يمكنك الاطّلاع على Mesh
وMeshRenderer
. يُرجى العِلم أنّه لا يتمّ احتساب القيم العادية تلقائيًا.
راجِع Mesh.RecalculateNormals()
لاحتسابها.
إرفاق محتوى الواقع المعزّز بجهاز ARStreetscapeGeometry
استخدِم ARAnchorManager.AddAnchor()
لإنشاء ارتساء في وضع معيّن بالقرب من الرؤوس في ARStreetscapeGeometry.mesh
. سيكتسب هذا الارتساء حالة تتبّعه من العنصر الرئيسي ARStreetscapeGeometry
.
إجراء اختبار نتيجة مقارنةً بـ ARStreetscapeGeometry
يمكن استخدام ARRaycastManagerExtensions.RaycastStreetscapeGeometry
لإجراء الاختبار في ضوء Streetscape Geometry. في حال العثور على تقاطعات، تحتوي السمة XRRaycastHit
على معلومات حول وضع الموقع الجغرافي للنتيجة بالإضافة إلى إشارة إلى ARStreetscapeGeometry
التي تم النقر عليها. يمكن تمرير شكل الشارع الهندسي هذا إلى 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);
}
}
تفعيل العمق الجغرافي المكاني
تعمل ميزة العمق الجغرافي المكاني على دمج هندسة صورة الشارع مع البيانات المتوفّرة في أدوات الاستشعار لتحسين بيانات العمق. عند تفعيل "العمق الجيوفضائي"، يتم تعديل عمق الإخراج والصور ذات العمق الأولي لتضمين هندسة صور الشارع النقطية بالإضافة إلى العمق المرصود محليًا. وقد يؤدي ذلك إلى تحسين دقة الوضعيات باستخدام ميزة "العمق".