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