Streetscape Geometry API は、シーン内の地形、建物、その他の構造物のジオメトリを提供します。ジオメトリは、オクルージョン、レンダリング、ヒットテスト API を介した AR コンテンツの配置に使用できます。ストリートビュー ジオメトリ データは、Google ストリートビュー画像から取得したものです。
サンプルを試す
GeospatialExample アプリは、Streetscape のジオメトリを取得してレンダリングする方法を示しています。
Geospatial API を設定する
Streetscape Geometry を使用するには、プロジェクトに Geospatial API を設定する必要があります。 Geospatial API を有効にするの手順に沿って、Geospatial API を設定します。
ストリートビュー ジオメトリを有効にする
Geospatial API は、GARGeospatialMode
が GARGeospatialModeEnabled
に設定され、GARStreetscapeGeometryMode
が GARStreetscapeGeometryModeEnabled
に設定されている場合に、Streetscape Geometry データを取得します。
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
ARCore セッションでストリートビュー ジオメトリを取得する
GARFrame.streetscapeGeometries
を使用して、すべての GARStreetscapeGeometry
オブジェクトを取得します。
GARStreetscapeGeometry
について理解する
GARStreetscapeGeometry
には、建物に関する情報が含まれています。
-
GARStreetscapeGeometry.type
StreetscapeGeometry を地形または建物として識別します。 -
GARStreetscapeGeometry.mesh
この地形や建物に対応するポリゴンGARMesh
を取得します。 -
GARStreetscapeGeometry.meshTransform
ジオメトリの原点を説明します。GARMesh
内のすべてのポイントはGARStreetscapeGeometry.meshTransform
で変換する必要があります。 -
GARStreetscapeGeometry.quality
メッシュデータの品質を提供します。詳細レベルは CityGML 2.0 規格で説明されています。
LOD 1 のビルド
GARStreetscapeGeometryQualityBuildingLOD_1
は、平らな上部まで上向きに押し出された建物のフットプリントで構成されます。建物の高さは正確でない可能性があります。
LOD 2 のビルド
GARStreetscapeGeometryQualityBuildingLOD_2
のジオメトリの忠実度が高まります。メッシュの壁や屋根は、建物の形状により近くなります。煙突や屋根の通気口などの小さい対象物は、メッシュの外側に突く可能性があります。
GARMesh
について理解する
GARMesh
は「ストリートビュー ジオメトリ」の表面の再構築を表すポリゴン メッシュです。
各 GARMesh
には、頂点バッファとインデックス バッファが含まれます。
GARMesh.vertexCount
このメッシュ内の頂点の数を取得します。GARMesh.vertices
メッシュの頂点の連結位置を、GARStreetscapeGeometry.meshTransform
。GARMesh.triangleCount
このメッシュ内のインデックスの数を取得します。GARMesh.triangles
面を構成する頂点のインデックスを取得します。
AR コンテンツを GARStreetscapeGeometry
にアタッチする
GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
を使用して、GARStreetscapeGeometry.meshTransform
の近くの特定のポーズにアンカーを作成します。このアンカーは、親 GARStreetscapeGeometry
からトラッキング状態を継承します。
GARStreetscapeGeometry
に対してヒットテストを行う
GARSession.raycastStreetscapeGeometry:direction:error:
を使用すると、ストリートビュー ジオメトリのヒットテストを行うことができます。交差点が見つかった場合、GARStreetscapeGeometryRaycastResult
にはヒットした場所に関するポーズ情報と、ヒットした GARStreetscapeGeometry
への参照が含まれます。このストリートビュー ジオメトリを GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
に渡して、このジオメトリに関連付けるアンカーを作成できます。
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];