Streetscape Geometry API は、シーン内の地形、建物、その他の構造物のジオメトリを提供します。このジオメトリは、ヒットテスト API を介してオクルージョン、レンダリング、AR コンテンツの配置に使用できます。街並みのジオメトリ データは、Google ストリートビューの画像から取得されます。
サンプルを試す
GeospatialExample アプリでは、ストリートビュー ジオメトリを取得してレンダリングする方法を示しています。
Geospatial API を設定する
街並みのジオメトリを使用するには、プロジェクトで 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];