プリミティブ トポロジ
Direct3D では、ポイントの一覧、線の一覧、三角形ストリップなどのいくつかのプリミティブ トポロジがサポートされており、パイプラインにより頂点がどのように解釈され、レンダリングされるかを定義します。
基本的なプリミティブ トポロジ
サポートされている基本的なプリミティブ トポロジ (または、プリミティブ タイプ) を以下に示します。
各プリミティブ タイプを視覚化したものを、この後の "ワインディング方向と先頭頂点の位置" の図で示しています。
入力アセンブラー (IA) ステージでは、頂点バッファーおよびインデックス バッファーからデータを読み取り、このデータをこれらのプリミティブにアセンブルし、残りのパイプライン ステージにデータを送信します。
プリミティブの隣接性
ポイント リストを除く Direct3D のすべてのプリミティブ タイプは、隣接性を持つプリミティブ タイプと、隣接性を持たないプリミティブ タイプの 2 種類に分けられます。 隣接性を持つプリミティブには、それを取り囲む頂点がいくつか含まれますが、隣接性を持たないプリミティブに含まれるのは、ターゲット プリミティブの頂点のみです。 たとえば、線リスト プリミティブには、対応する、隣接性を含む線リスト プリミティブが存在します。
隣接プリミティブは、ジオメトリに関する追加情報の提供を目的としており、ジオメトリ シェーダーによってのみ認識されます。 隣接性は、シルエット検出やシャドウ ボリュームの押し出しなどを使用するジオメトリ シェーダーで役に立ちます。
たとえば、隣接性のあるトライアングル リストを描画するとします。 36 個の頂点を持つ隣接性のあるトライアングル リストからは 6 個の完全なプリミティブが作成されます。 ライン ストリップを除き、隣接性のあるプリミティブは、隣接性を持たない同じプリミティブのちょうど 2 倍の頂点を含んでいます。ここで、追加の頂点はそれぞれ隣接頂点です。
ワインディング方向と先頭頂点の位置
下の図にあるように、先頭頂点は、プリミティブ内の最初の非隣接頂点です。 先頭頂点がそれぞれ異なるプリミティブで使用されている限り、1 つのプリミティブ タイプで複数の先頭頂点を定義することができます。
- 隣接性を持つトライアングル ストリップでは、先頭頂点は 0、2、4、6 ... となります。
- 隣接性を持つライン ストリップでは、先頭頂点は 1、2、3 ... となります。
- 一方、隣接プリミティブには先頭頂点はありません。
次の図は、入力アセンブラーで生成可能なすべてのプリミティブ タイプの頂点の順序を表しています。
この図の記号の意味を、次の表に示します。
シンボル | 名前 | 説明 |
---|---|---|
![]() |
Vertex | 3D 空間内の点です。 |
![]() |
ワインディング方向 | プリミティブをアセンブルするときの頂点の順序です。 時計回り、または反時計回りです。 |
![]() |
先頭頂点 | プリミティブ内で、定数ごとのデータを含む最初の非隣接頂点です。 |
複数のストリップの生成
ストリップ カットによって、複数のストリップを生成することができます。 ストリップ カットを実行するには、RestartStrip HLSL 関数を明示的に呼び出すか、インデックス バッファーに特殊なインデックス値を挿入します。 この値とは –1 で、32 ビットのインデックスは 0xffffffff、16 ビットのインデックスは 0xffff です。
-1 のインデックスは、現在のストリップの明示的な ”カット” または ”再開” を示します。 前のインデックスは前のプリミティブかストリップを完了し、次のインデックスは新しいプリミティブかストリップを開始します。
複数のストリップの生成について、詳細は「ジオメトリ シェーダー (GS) ステージ」を参照してください。
関連トピック