As APIs Streetscape Geometry fornecem a geometria do terreno, edifícios ou outras estruturas em uma cena. A geometria pode ser usada para oclusão, renderização ou colocação de conteúdo de RA por meio de APIs de teste de hit. Os dados do Streetscape Geometry são obtidos por meio de imagens do Google Street View.
Testar o exemplo
O app de exemplo geospatial_java demonstra como receber e renderizar geometrias do Streetscape.
Configurar a API Geospatial
Para usar o Streetscape Geometry, você precisará configurar a API Geospatial no seu projeto. Siga as instruções em Como ativar a API Geospatial para configurar a API Geospatial.
Ativar Streetscape Geometry
A API Geospatial recebe os dados do Streetscape Geometry quando GeospatialMode
está definido como GeospatialMode.ENABLED
e StreetscapeGeometryMode
está definido como StreetscapeGeometryMode.ENABLED
.
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 } )
Obter Streetscape Geometry em uma sessão do ARCore
UseSession.getAllTrackables()
e StreetscapeGeometry.class
para filtrar os resultados.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Entender o StreetscapeGeometry
StreetscapeGeometry
contém informações sobre uma construção:
-
StreetscapeGeometry.getType()
Identifica StreetscapeGeometry como um terreno ou uma construção. -
StreetscapeGeometry.getMesh()
Encontre um polígonoMesh
que corresponda a esse terreno ou construção. -
StreetscapeGeometry.getMeshPose()
Descreve a origem da geometria. Todos os pontos noMesh
precisam ser transformados porStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Fornece a qualidade dos dados da malha. Os níveis de detalhamento são descritos no padrão CityGML 2.0.
Edifício LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
consiste em plantas extruídas para cima até um topo plano. A altura das construções pode estar incorreta.
Edifício LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
terá uma geometria de maior fidelidade. Paredes e telhados de malha vão se aproximar mais do formato do edifício. Recursos menores, como chaminés ou aberturas no telhado, ainda podem sair da rede mesh.
Entender o Mesh
Mesh
é uma malha de polígonos que representa uma reconstrução de superfície do Streetscape Geometry.
Cada Mesh
inclui um buffer de vértice e de índice:
Mesh.getVertexListSize()
Recupera o número de vértices na malha.Mesh.getVertexList()
Obter as posições concatenadas dos vértices da malha em coordenadas relativas aStreetscapeGeometry.getMeshPose()
Mesh.getIndexListSize()
Recupera o número de índices na malha.Mesh.getIndexList()
Conseguir os índices de vértices que compõem uma face.
Anexar conteúdo de RA a um StreetscapeGeometry
Há duas maneiras de anexar conteúdo de RA ao Streetscape Geometry:
- Ative Profundidade geoespacial e use um Teste de profundidade de profundidade. Esse é o método mais fácil e recomendado.
- Use
Trackable.createAnchor()
para criar uma âncora em uma determinada pose anexada a umaStreetscapeGeometry
. Esta âncora herdará o estado de acompanhamento doStreetscapeGeometry
pai.
Executar um teste de hit em StreetscapeGeometry
Frame.hitTest()
pode ser usado para fazer um teste de hit em relação ao Streetscape Geometry. Se houver cruzamentos, HitResult
conterá informações de pose sobre o local do hit, bem como uma referência ao StreetscapeGeometry
que foi atingido. Esse Streetscape Geometry pode ser transmitido a Trackable.createAnchor()
para criar uma âncora anexada a ele.
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) } }
Ativar profundidade geoespacial
A profundidade geoespacial combina a geometria Streetscape Geometry. com entrada de sensor local para aprimorar os dados de profundidade. Quando a opção "Geospatial Depth" está ativada, a profundidade de saída e as imagens de profundidade bruta são modificadas para incluir a imagem rasterizada Streetscape Geometry, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a Profundidade.