Streetscape Geometri API'leri, bir sahnedeki arazi, bina veya diğer yapıların geometrisini sağlar. Geometri, isabet testi API'leri aracılığıyla AR içeriği yerleştirmek, gölgelendirmek veya gizlemek için kullanılabilir. Sokak Görünümü Geometrisi verileri, Google Street View görüntüleri aracılığıyla elde edilir.
Örneği deneyin
geospatial_java örnek uygulaması, Streetscape Geometries'i nasıl edineceğinizi ve oluşturacağınızı gösterir.
Coğrafi API'yi ayarlama
Sokak Görünümü Geometrisi'ni kullanmak için projenizde Coğrafi API'yi ayarlamanız gerekir. Geospatial API'yi ayarlamak için Geospatial API'yi etkinleştirme başlıklı makaledeki talimatları uygulayın.
Cadde Manzarası Geometrisini Etkinleştirme
Geospatial API, GeospatialMode
GeospatialMode.ENABLED
ve StreetscapeGeometryMode
StreetscapeGeometryMode.ENABLED
olarak ayarlandığında Streetscape Geometry verilerini alır.
Java
Config config = session.getConfig(); // Streetscape Geometry requires the Geospatial API to be enabled. config.setGeospatialMode(Config.GeospatialMode.ENABLED); // Enable Streetscape Geometry. config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); session.configure(config);
Kotlin
session.configure( session.config.apply { // Streetscape Geometry requires the Geospatial API to be enabled. geospatialMode = Config.GeospatialMode.ENABLED // Enable Streetscape Geometry. streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } )
ARCore oturumunda Streetscape Geometrisi elde etme
Sonuçları filtrelemek içinSession.getAllTrackables()
ve StreetscapeGeometry.class
simgesini kullanın.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
StreetscapeGeometry
hakkında bilgi edinme
StreetscapeGeometry
, bir bina hakkındaki bilgileri içerir:
-
StreetscapeGeometry.getType()
StreetscapeGeometry'yi arazi veya bina olarak tanımlar. -
StreetscapeGeometry.getMesh()
Bu araziye veya binaya karşılık gelen bir poligonMesh
edinin. -
StreetscapeGeometry.getMeshPose()
Geometrinin kaynağını açıklar.Mesh
içindeki tüm noktalarStreetscapeGeometry.getMeshPose()
tarafından dönüştürülmelidir. -
StreetscapeGeometry.getQuality()
Ağın kalitesini sağlar. Ayrıntı düzeyleri CityGML 2.0 standardında açıklanmıştır.
Bina LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
, düz bir üst yüzeye doğru yukarı doğru uzatılmış bina ayak izlerinden oluşur. Bina yükseklikleri doğru olmayabilir.
Bina LOD'si 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
daha yüksek kaliteli geometriye sahiptir. Örgü duvarlar ve çatılar binanın şekliyle daha yakından eşleşir. Bacalar veya çatı havalandırmaları gibi küçük özellikler yine de ağın dışına çıkabilir.
Mesh
hakkında bilgi edinme
Mesh
, sokak manzarası geometrisinin yüzey yeniden yapılandırmasını temsil eden bir poligon örgüsüdür.
Her Mesh
bir köşe arabelleği ve dizin arabelleği içerir:
Mesh.getVertexListSize()
Bu ağdaki köşe sayısını döndürür.Mesh.getVertexList()
StreetscapeGeometry.getMeshPose()
'e göre koordinatlarda, ağ köşelerinin birleştirilmiş konumlarını alın.Mesh.getIndexListSize()
Bu ağdaki dizin sayısını döndürür.Mesh.getIndexList()
Bir yüzü oluşturan köşelerin dizinlerini alın.
StreetscapeGeometry
'a AR içeriği ekleme
AR içeriğini Streetscape Geometrisine eklemenin iki yolu vardır:
- Coğrafi Derinlik'i etkinleştirin ve Derinlik isabet testi kullanın. Bu, önerilen ve daha kolay yöntemdir.
StreetscapeGeometry
simgesine bağlı belirli bir pozda sabit bir poz oluşturmak içinTrackable.createAnchor()
simgesini kullanın. Bu sabit, izleme durumunu üstStreetscapeGeometry
öğesinden devralır.
StreetscapeGeometry
üzerinde isabet testi gerçekleştirin
Frame.hitTest()
, Streetscape Geometrisi ile isabet testi yapmak için kullanılabilir. Kesişimler bulunursa, HitResult
isabet konumu hakkında poz bilgilerinin yanı sıra isabet edilen StreetscapeGeometry
için bir referans içerir. Bu Streetscape geometrisi, kendisine ekli bir sabit dosya oluşturmak için Trackable.createAnchor()
öğesine iletilebilir.
Java
for (HitResult hit : frame.hitTest(singleTapEvent)) { if (hit.getTrackable() instanceof StreetscapeGeometry) { Pose hitPose = hit.getHitPose(); hit.getTrackable().createAnchor(hitPose); } }
Kotlin
for (hit in frame.hitTest(singleTapEvent)) { if (hit.trackable is StreetscapeGeometry) { val hitPose = hit.hitPose hit.trackable.createAnchor(hitPose) } }
Coğrafi Derinlik'i etkinleştirme
Coğrafi Derinlik, derinlik verilerini iyileştirmek için Sokak Görünümü Geometrisi ile yerel sensör girişini birleştirir. Coğrafi Derinlik etkinleştirildiğinde, çıkış derinliği ve ham derinlik resimleri, yerel olarak gözlemlenen derinliğe ek olarak rasterleştirilmiş sokak manzarası geometrisini içerecek şekilde değiştirilir. Bu, derinlik özelliğini kullanarak pozların doğruluğunu artırabilir.