توفر واجهات برمجة التطبيقات Geometry API هندسة التضاريس أو المباني أو غيرها من الهياكل في أحد المشاهد. يمكن استخدام الشكل الهندسي لإغراق محتوى الواقع المعزّز أو عرضه أو وضعه عبر واجهات برمجة تطبيقات اختبار النتائج. يتم الحصول على بيانات "هندسة التجوّل الافتراضي" من خلال صور "التجوّل الافتراضي من Google".
تجربة النموذج
يوضح نموذج تطبيق الجغرافيا المكانية كيفية الحصول على هندسة "التجوّل الافتراضي" وعرضها.
عملية إعداد واجهة برمجة التطبيقات Geospatial API
لاستخدام Streetscape Geometry، ستحتاج إلى إعداد Geospatial API في مشروعك. اتّبِع التعليمات حول تفعيل واجهة برمجة التطبيقات Geospatial API لإعداد Geospatial API.
تفعيل هندسة التجوّل الافتراضي
تحصل واجهة برمجة التطبيقات Geospatial API على بيانات Streetscape Geometry عند ضبط 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.
مبنى LOD 1
يتألّف BuildingLOD1
من آثار أقدام مبانٍ تنبثق باتجاه قمة مستوية. وقد تكون ارتفاعات المباني غير دقيقة.
مبنى LOD 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);
}
}
تفعيل العمق الجغرافي المكاني
تجمع العمق الجغرافي المكاني بين هندسة "التجوّل الافتراضي" مع مدخلات أداة الاستشعار المحلية لتعزيز بيانات العمق. عند تفعيل "العمق الجغرافي المكاني"، يتم تعديل عمق المخرجات والصور ذات العمق الأولي لتضمين هندسة التجوّل الافتراضي التي تم بكسلتها بالإضافة إلى العمق الذي يتم رصده محليًا. وقد يؤدي ذلك إلى تحسين دقة الوضعيات باستخدام ميزة "العمق".