Streetscape Geometry API는 장면의 지형지물, 건물 또는 기타 구조물의 도형을 제공합니다. 이 도형은 히트 테스트 API를 통한 가림, 렌더링 또는 AR 콘텐츠 배치에 사용할 수 있습니다. 거리 풍경 형태 데이터는 Google 스트리트 뷰 이미지를 통해 얻을 수 있습니다.
Geospatial API 설정
Streetscape Geometry를 사용하려면 프로젝트에서 Geospatial API를 설정해야 합니다. Geospatial API 사용 설정의 안내에 따라 Geospatial API를 설정합니다.
거리 풍경 도형 사용 설정
Geospatial API는 ArGeospatialMode
가 ArGeospatialModeEnabled
로 설정되고 ArStreetscapeGeometryMode
가 ArStreetscapeGeometryModeEnabled
로 설정된 경우 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
에는 건물에 관한 정보가 포함됩니다.
-
ArStreetscapeGeometry_getType()
StreetscapeGeometry를 지형지물 또는 건물로 식별합니다. -
ArStreetscapeGeometry_acquireMesh()
이 지형지물 또는 건물에 해당하는 다각형ArMesh
을 가져옵니다. -
ArStreetscapeGeometry_getMeshPose()
도형의 원점을 설명합니다.ArMesh
의 모든 점은ArStreetscapeGeometry_getMeshPose()
로 변환되어야 합니다. -
ArStreetscapeGeometry_getQuality()
메시 데이터의 품질을 제공합니다. 세부 수준은 CityGML 2.0 표준에 설명되어 있습니다.
건물 LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
는 평평한 상단으로 위쪽으로 돌출된 건물 풋프린트로 구성됩니다. 건물 높이가 부정확할 수 있습니다.
건물 LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
는 더 높은 충실도의 도형을 갖습니다. 메시 벽과 지붕은 건물의 모양에 더 근접합니다. 굴뚝이나 지붕 통풍구와 같은 작은 지형지물은 메시지 외부에 표시될 수 있습니다.
ArMesh
이해하기
ArMesh
는 거리 풍경 도형의 표면 재구성에 해당하는 다각형 메시입니다.
각 ArMesh
에는 정점 버퍼와 색인 버퍼가 포함됩니다.
ArMesh_getVertexListSize()
이 메시의 꼭짓점 수를 검색합니다.ArMesh_getVertexList()
ArStreetscapeGeometry_getMeshPose()
를 기준으로 한 좌표에서 메시 꼭짓점의 연결된 위치를 가져옵니다.ArMesh_getIndexListSize()
이 메시의 색인 수를 검색합니다.ArMesh_getIndexList()
얼굴을 구성하는 정점의 색인을 가져옵니다.
ArStreetscapeGeometry
에 AR 콘텐츠 첨부
AR 콘텐츠를 거리 풍경 도형에 연결하는 방법에는 두 가지가 있습니다.
- Geospatial Depth를 사용 설정하고 Depth 히트 테스트를 사용합니다. 이 방법이 권장되며 더 쉽습니다.
ArTrackable_acquireNewAnchor()
를 사용하여ArStreetscapeGeometry
에 연결된 지정된 포즈에 앵커를 만듭니다. 이 앵커는 상위ArStreetscapeGeometry
에서 추적 상태를 상속합니다.
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가 사용 설정되면 로컬에서 관찰된 깊이 외에 래스터화된 거리 풍경 도형을 포함하도록 출력 깊이 및 원시 깊이 이미지가 수정됩니다. 이렇게 하면 깊이를 사용하는 포즈의 정확성이 향상될 수 있습니다.