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

Streetscape Geometry API는 장면에 있는 지형, 건물 또는 기타 구조물의 도형을 제공합니다. 이 도형은 Hit Test 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 콘텐츠를 Streetscape Geometry에 첨부하는 방법에는 두 가지가 있습니다.

ArStreetscapeGeometry에 Hit 테스트 실행

ArFrame_hitTest를 사용하여 Streetscape Geometry에 대한 Hit Test를 수행할 수 있습니다. 교차점이 발견되면 ArHitResult에 적중 위치에 대한 포즈 정보와 적중된 ArStreetscapeGeometry에 대한 참조가 포함됩니다. 거리 풍경 형태를 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를 사용 설정하면 로컬에서 관찰된 깊이 외에도 래스터화된 Streetscape Geometry를 포함하도록 출력 깊이와 원시 깊이 이미지가 수정됩니다. 깊이를 사용하여 포즈의 정확도를 높일 수 있습니다.