Streetscape Geometry API, किसी सीन में मौजूद इलाके, इमारतों या अन्य स्ट्रक्चर की ज्यामिति की जानकारी देते हैं. हिट-टेस्ट एपीआई की मदद से, ज्यामिति का इस्तेमाल ऑब्स्क्यूरेशन, रेंडरिंग या एआर कॉन्टेंट को प्लेस करने के लिए किया जा सकता है. Streetscape Geometry का डेटा, Google Street View की इमेज से मिलता है.
सैंपल आज़माएं
जियोस्पेशल सैंपल ऐप्लिकेशन में, Streetscape की ज्यामिति पाने और उसे रेंडर करने का तरीका बताया गया है.
Geospatial API सेट अप करना
Streetscape Geometry का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में Geospatial API सेट अप करना होगा. जियोस्पेशियल एपीआई सेट अप करने के लिए, जियोस्पेशियल एपीआई चालू करने के निर्देशों का पालन करें.
स्ट्रीटस्केप ज्यामिति की सुविधा चालू करना
जब GeospatialMode
को GeospatialMode.Enabled
और StreetscapeGeometryMode
को StreetscapeGeometryMode.Enabled
पर सेट किया जाता है, तब Geospatial API, Streetscape Geometry का डेटा हासिल करता है.
किसी ArCore सेशन में Streetscape की जियोमेट्री पाना
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
StreetscapeGeometry को टेरेन या बिल्डिंग के तौर पर पहचानता है. -
ARStreetscapeGeometry.mesh
इस इलाके या इमारत से जुड़ा पॉलीगॉनMesh
पाएं. -
ARStreetscapeGeometry.quality
मेश डेटा की क्वालिटी दिखाता है. ज़्यादा जानकारी के लेवल के बारे में CityGML 2.0 स्टैंडर्ड में बताया गया है.
बिल्डिंग का एलओडी 1
BuildingLOD1
में, इमारत के फ़ुटप्रिंट को ऊपर की ओर एक सपाट टॉप तक एक्सट्रूज़न किया जाता है. हो सकता है कि इमारतों की ऊंचाई की जानकारी गलत हो.
बिल्डिंग का एलओडी 2
BuildingLOD2
में बेहतर क्वालिटी की ज्यामिति होगी. मेश की दीवारें और छतें, इमारत के आकार से ज़्यादा मेल खाएंगी. चिमनी या छत के वेंट जैसी छोटी चीज़ें, अब भी मेश के बाहर दिख सकती हैं.
Mesh
के बारे में जानकारी
Mesh
एक पॉलीगॉन मेश है, जो Streetscape Geometry की सतह को फिर से बनाने का तरीका दिखाता है.
Mesh
और MeshRenderer
देखें. ध्यान दें कि सामान्य वैल्यू का हिसाब डिफ़ॉल्ट रूप से नहीं लगाया जाता.
उनका हिसाब लगाने के लिए, Mesh.RecalculateNormals()
देखें.
ARStreetscapeGeometry
से एआर कॉन्टेंट अटैच करना
ARStreetscapeGeometry.mesh
में किसी पोज़ में, वर्टिसेस के पास ऐंकर बनाने के लिए, ARAnchorManager.AddAnchor()
का इस्तेमाल करें. यह ऐंकर, पैरंट 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);
}
}
भौगोलिक डेटा की गहराई की सुविधा चालू करना
जियोस्पेशल डेप्थ, डेप्थ डेटा को बेहतर बनाने के लिए, Streetscape Geometry को लोकल सेंसर इनपुट के साथ जोड़ता है. भौगोलिक डेटा के आधार पर गहराई का पता लगाने की सुविधा चालू होने पर, आउटपुट की गहराई और रॉ डेप्थ इमेज में बदलाव किया जाता है. ऐसा इसलिए किया जाता है, ताकि स्थानीय तौर पर गहराई का पता लगाने के साथ-साथ, रेस्टर की गई Streetscape ज्यामिति को भी शामिल किया जा सके. इससे, डेप्थ का इस्तेमाल करके पोज़ की सटीक जानकारी मिल सकती है.