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