Streetscape Geometry API は、シーン内の地形、建物、その他の構造物のジオメトリを提供します。ジオメトリは、ヒットテスト API を介してオクルージョン、レンダリング、AR コンテンツの配置に使用できます。ストリートビュー ジオメトリ データは、Google ストリートビューの画像を通じて取得されます。
Geospatial API を設定する
ストリートビュー ジオメトリを使用するには、プロジェクトに Geospatial API を設定する必要があります。Geospatial API の有効化の手順に沿って、Geospatial API を設定します。
ストリートビュー ジオメトリを有効にする
Geospatial API は、ArGeospatialMode
が ArGeospatialModeEnabled
に、ArStreetscapeGeometryMode
が ArStreetscapeGeometryModeEnabled
に設定されている場合、ストリートビュー ジオメトリ データを取得します。
// 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()
顔を構成する頂点のインデックスを取得します。
AR コンテンツを ArStreetscapeGeometry
にアタッチする
AR コンテンツをストリートビュー ジオメトリに追加するには、次の 2 つの方法があります。
- [Geospatial Depth] を有効にして、Depth ヒットテストを使用します。これが推奨される簡単な方法です。
ArTrackable_acquireNewAnchor()
を使用して、ArStreetscapeGeometry
にアタッチされた特定のポーズにアンカーを作成します。このアンカーは親のArStreetscapeGeometry
からトラッキング ステータスを継承します。
ArStreetscapeGeometry
に対してヒットテストを行う
ArFrame_hitTest
を使用すると、ストリートビュー ジオメトリに対するヒットテストを行うことができます。交差が見つかった場合、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 は、ストリートビュー ジオメトリとローカル センサー入力を組み合わせて、奥行きデータを強化します。Geospatial Depth を有効にすると、出力深度と未加工の奥行きの画像が変更され、ローカルで観測された深度に加えて、ラスター化されたストリートビュー ジオメトリが含まれるようになります。これにより、奥行きを使用したポーズの精度が向上する可能性があります。