Android NDK (C)에서 주변 건물과 지형 사용

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

Geospatial API 설정

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

거리 풍경 도형 사용 설정

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

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Enable the Geospatial API.
ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Enable Streetscape Geometry.
ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Release config resources.
ArConfig_destroy(ar_config);

ARCore 세션에서 거리 풍경 도형 가져오기

ArSession_getAllTrackables()를 사용하고 AR_TRACKABLE_STREETSCAPE_GEOMETRY를 사용하여 결과를 필터링합니다.

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

ArStreetscapeGeometry 이해하기

ArStreetscapeGeometry에는 건물에 관한 정보가 포함됩니다.

건물 LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1는 평평한 상단으로 위쪽으로 돌출된 건물 풋프린트로 구성됩니다. 건물 높이가 부정확할 수 있습니다.

건물 LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2는 더 높은 충실도의 도형을 갖습니다. 메시 벽과 지붕은 건물의 모양에 더 근접합니다. 굴뚝이나 지붕 통풍구와 같은 작은 지형지물은 메시지 외부에 표시될 수 있습니다.

ArMesh 이해하기

ArMesh는 거리 풍경 도형의 표면 재구성에 해당하는 다각형 메시입니다. 각 ArMesh에는 정점 버퍼와 색인 버퍼가 포함됩니다.

ArStreetscapeGeometry에 AR 콘텐츠 첨부

AR 콘텐츠를 거리 풍경 도형에 연결하는 방법에는 두 가지가 있습니다.

ArStreetscapeGeometry에 대해 히트 테스트를 실행합니다.

ArFrame_hitTest를 사용하여 Streetscape Geometry에 대해 히트 테스트를 실행할 수 있습니다. 교차점이 발견되면 ArHitResult에는 충돌 위치에 관한 포즈 정보와 충돌한 ArStreetscapeGeometry에 대한 참조가 포함됩니다. 이 Streetscape Geometry는 ArTrackable_acquireNewAnchor()에 전달하여 여기에 연결된 앵커를 만들 수 있습니다.

ArHitResultList *hit_result_list = NULL;
ArHitResult *hit_result = NULL;
ArHitResultList_create(ar_session, &hit_result_list);
ArHitResult_create(ar_session, &hit_result);

ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list);
ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result);

ArAnchor *out_anchor = NULL;
ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor);
CHECK(status == AR_SUCCESS);

Geospatial Depth 사용 설정

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