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