Android SDK (Kotlin/자바)에서 주변의 건물과 지형 사용

Streetscape Geometry API는 장면의 지형지물, 건물 또는 기타 구조물의 도형을 제공합니다. 이 도형은 히트 테스트 API를 통한 가림, 렌더링 또는 AR 콘텐츠 배치에 사용할 수 있습니다. 거리 풍경 형태 데이터는 Google 스트리트 뷰 이미지를 통해 얻을 수 있습니다.

샘플 사용해 보기

geospatial_java 샘플 앱은 거리 풍경 도형을 가져오고 렌더링하는 방법을 보여줍니다.

Geospatial API 설정

Streetscape Geometry를 사용하려면 프로젝트에서 Geospatial API를 설정해야 합니다. Geospatial API 사용 설정의 안내에 따라 Geospatial API를 설정합니다.

거리 풍경 형태 사용 설정

Geospatial API는 GeospatialModeGeospatialMode.ENABLED로 설정되고 StreetscapeGeometryModeStreetscapeGeometryMode.ENABLED로 설정된 경우 Streetscape Geometry 데이터를 가져옵니다.

자바

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 세션에서 Streetscape Geometry 가져오기

Session.getAllTrackables()를 사용하고 StreetscapeGeometry.class를 사용하여 결과를 필터링합니다.

자바

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

StreetscapeGeometry 이해하기

StreetscapeGeometry에는 건물에 대한 정보가 포함되어 있습니다.

LOD 1 빌드

StreetscapeGeometry.Quality.BUILDING_LOD_1는 평평한 상단까지 위쪽으로 돌출된 건물 접지면으로 구성됩니다. 건물 높이가 부정확할 수 있습니다.

건물 LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2는 더 높은 충실도 도형을 갖습니다. 메시 벽과 지붕이 건물의 모양과 더 잘 일치합니다. 굴뚝이나 지붕 환기구와 같은 작은 지형지물이 여전히 메시 바깥쪽을 뚫을 수 있습니다.

Mesh 이해하기

Mesh는 거리 풍경 도형의 표면 재구성을 나타내는 다각형 메시입니다. 각 Mesh에는 정점 버퍼와 색인 버퍼가 포함됩니다.

StreetscapeGeometry에 AR 콘텐츠 첨부

AR 콘텐츠를 Streetscape Geometry에 연결하는 방법에는 두 가지가 있습니다.

StreetscapeGeometry에 대해 Hit Test 실행

Frame.hitTest()를 사용하여 Streetscape Geometry에 대해 히트 테스트를 실행할 수 있습니다. 교차점이 있으면 HitResult에 적중 위치에 대한 포즈 정보와 적중된 StreetscapeGeometry에 대한 참조가 포함됩니다. 이 Streetscape Geometry는 Trackable.createAnchor()에 전달하여 여기에 연결된 앵커를 만들 수 있습니다.

자바

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)
  }
}

Geospatial Depth 사용 설정

Geospatial Depth는 Streetscape Geometry와 로컬 센서 입력을 결합하여 깊이 데이터를 개선합니다. Geospatial Depth가 사용 설정되면 로컬에서 관찰된 깊이 외에 래스터화된 거리 풍경 도형을 포함하도록 출력 깊이 및 원시 깊이 이미지가 수정됩니다. 이렇게 하면 깊이를 사용하는 포즈의 정확성이 향상될 수 있습니다.