Streetscape Geometry API'leri, bir sahnedeki arazinin, binaların veya diğer yapıların geometrisini sunar. Geometri; isabet testi API'leri aracılığıyla AR içeriğini kapamak, 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 deneyin
Coğrafi mekansal örnek uygulama, Streetscape Geometris'lerinin nasıl alınacağını ve oluşturulduğunu gösterir.
Geospatial API'yi ayarlama
Streetscape Geometri'yi kullanmak için projenizde Geospatial API'yi ayarlamanı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. Streetscape Geometries eklendiğinde, güncellendiğinde veya kaldırıldığında 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
adlı ürünü anlayın
ARStreetscapeGeometry
bir bina hakkında bilgiler içerir:
-
ARStreetscapeGeometry.streetscapeGeometryType
StreetscapeGeometry'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 LOD 1
BuildingLOD1
, yukarı doğru düz bir tepeye uzanan bina ayak izlerinden oluşur. Bina yükseklikleri doğru olmayabilir.
Bina LOD 2
BuildingLOD2
, geometriye daha iyi uyum sağlar. Örgü duvarlar ve çatılar binanın şekliyle daha uyumlu olacaktır. Bacalar veya çatı menfezleri gibi küçük detaylar yine de ağın dışına kırılabilir.
Mesh
adlı ürünü anlayın
Mesh
, Streetscape Geometrisinin yüzey yeniden yapısını temsil eden bir poligon örgüdür.
Daha fazla bilgi için Mesh
ve MeshRenderer
başlıklı makaleleri inceleyin. Normallerin varsayılan olarak hesaplanmadığını unutmayın. Bunları hesaplamak için Mesh.RecalculateNormals()
sayfasını inceleyin.
ARStreetscapeGeometry
'e artırılmış gerçeklik içeriği ekleme
ARStreetscapeGeometry.mesh
alt bölgesinde köşelerin yakınında belirli bir pozda bir çapa oluşturmak için ARAnchorManager.AddAnchor()
aracını kullanın. Bu sabit, izleme durumunu üst öğeden (ARStreetscapeGeometry
) devralacak.
ARStreetscapeGeometry
ile isabet testi yapın.
ARRaycastManagerExtensions.RaycastStreetscapeGeometry
, Streetscape Geometry'de isabet testi yapmak için kullanılabilir. Kesişmeler bulunursa XRRaycastHit
, isabet konumuyla ilgili poz bilgilerinin yanı sıra isabet alan ARStreetscapeGeometry
için bir referans içerir. Bu Streetscape Geometrisi, kendisine ekli bir çapa oluşturulması için ARAnchorManager.AddAnchor()
'e 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, derinlik verilerini iyileştirmek için Streetscape Geometrisini yerel sensör girişiyle birleştirir. Coğrafi Derinlik etkinleştirildiğinde, çıkış derinliği ve ham derinlik görüntüleri, yerel olarak gözlemlenen derinliğe ek olarak pikselleştirilmiş Streetscape Geometrisi içerecek şekilde değiştirilir. Bu, Derinlik özelliği kullanılarak pozların doğruluğunu artırabilir.