Usar edifícios e terrenos ao seu redor no SDK do Android (Kotlin/Java)

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 conseguir e renderizar geometrias da paisagem urbana.

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

Use Session.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:

Criação de 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 da geometria do Streetscape. Cada Mesh inclui um buffer de vértice e um buffer de índice:

Anexar conteúdo de RA a um StreetscapeGeometry

Há duas maneiras de anexar conteúdo de RA ao Streetscape Geometry:

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. Essa geometria Streetscape pode ser transmitida para Trackable.createAnchor() para criar uma âncora anexada a ela.

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 dados de profundidade. Quando a API Geospatial Depth está ativada, a profundidade de saída e as imagens de profundidade bruta são modificadas para incluir a geometria da paisagem urbana rasterizada, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a Profundidade.