Streetscape Geometri API'leri, bir sahnedeki arazinin, binaların veya diğer yapıların geometrisini sağlar. Geometri, isabet testi API'leri aracılığıyla AR içeriğini örtmek, oluşturmak veya yerleştirmek için kullanılabilir. Streetscape Geometri verileri, Google Street View görüntüleri aracılığıyla elde edilir.
Örneği dene
Coğrafi konum örnek uygulaması, Streetscape Geometrileri'nin nasıl edinileceğini ve oluşturulacağını gösterir.
Geospatial API'yi ayarlama
Streetscape Geometri'yi kullanmak için projenizde Geospatial API'yi kurmanız gerekir. Geospatial API'yi ayarlamak için Geospatial API'yi Etkinleştirme bölümündeki talimatları uygulayın.
Streetscape Geometrisini Etkinleştir
Geospatial API, GeospatialMode
GeospatialMode.Enabled
ve StreetscapeGeometryMode
StreetscapeGeometryMode.Enabled
olarak ayarlandığında Streetscape Geometri verilerini alır.
ARCore oturumunda Streetscape Geometrisi elde etme
GameObject
öğesine bir ARStreetscapeGeometryManager
bileşeni ekleyin. Zaman
Streetscape geometrisi eklenir, güncellenir veya kaldırılır. Ardından ARStreetscapeGeometryManager.StreetscapeGeometriesChanged
etkinliği tetiklenir.
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
'i anlama
ARStreetscapeGeometry
bir bina hakkında bilgi içeriyor:
-
ARStreetscapeGeometry.streetscapeGeometryType
StreetscapeGeometri'yi arazi veya bina olarak tanımlar. -
ARStreetscapeGeometry.mesh
Bu araziye veya binaya karşılık gelen bir poligonMesh
edinin. -
ARStreetscapeGeometry.quality
Örgü verilerinin kalitesini sağlar. Ayrıntı düzeyleri CityGML 2.0 standardında açıklanmıştır.
Bina YK 1
BuildingLOD1
, yukarı doğru düz bir yüzeye uzatılmış bina ayak izlerinden oluşur. Bina yükseklikleri yanlış olabilir.
Bina LOD'si 2
BuildingLOD2
daha yüksek doğruluklu geometriye sahip olur. Örgü duvarlar ve çatılar binanın şekliyle daha yakından eşleşir. Bacalar veya çatı havalandırmaları gibi daha küçük detaylar, ağın dışına çıkmaya devam edebilir.
Mesh
'i anlama
Mesh
, Streetscape geometrisinin yüzey rekonstrüksiyonunu temsil eden bir poligon örgüsüdür.
Bkz. Mesh
ve MeshRenderer
. Normallerin varsayılan olarak hesaplanmadığını unutmayın;
bunları hesaplamak için Mesh.RecalculateNormals()
bölümüne bakın.
ARStreetscapeGeometry
'e artırılmış gerçeklik (AR) içeriği ekleme
ARStreetscapeGeometry.mesh
bölgesindeki köşelerin yakınındaki belirli bir pozda sabit bir nokta oluşturmak için ARAnchorManager.AddAnchor()
simgesini kullanın. Bu sabit, izleme durumunu üst ARStreetscapeGeometry
öğesinden devralır.
ARStreetscapeGeometry
üzerinde isabet testi gerçekleştirin
ARRaycastManagerExtensions.RaycastStreetscapeGeometry
, Streetscape geometrisine karşı isabet testi yapmak için kullanılabilir. Kesişimler bulunursa, XRRaycastHit
isabet konumu hakkında poz bilgilerinin yanı sıra isabet edilen ARStreetscapeGeometry
için bir referans içerir. Bu Streetscape geometrisi, kendisine ekli bir sabit dosya oluşturmak için ARAnchorManager.AddAnchor()
öğesine iletilebilir.
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);
}
}
Coğrafi Derinliği etkinleştir
Coğrafi Derinlik, Sokak Görünümü Geometrisini birleştirir yerel sensör girişine yardımcı olalım. Coğrafi Derinlik etkinleştirildiğinde, çıkış derinliği ve ham derinlik görüntüleri, yerel olarak gözlemlenen derinliğe ek olarak rasterleştirilmiş Streetscape Geometrisi içerecek şekilde değiştirilmiştir. Bu, Derinlik kullanılarak yapılan pozların doğruluğunu iyileştirebilir.