次の方法で共有


プリミティブ トポロジ

Direct3D 10 以降では、D3D_PRIMITIVE_TOPOLOGY 列挙型で表される複数のプリミティブ型 (またはトポロジ) がサポートされています。 これらの型は、パイプラインによって頂点がどのように解釈およびレンダリングされるかを定義します。

基本プリミティブ型

次の基本的なプリミティブ型がサポートされています。

各プリミティブ型の視覚化については、このトピックの後半の「巻き方向と先頭の頂点位置」の図を参照してください。

入力アセンブラー ステージは、頂点バッファーとインデックス バッファーからデータを読み取り、データをこれらのプリミティブにアセンブルしてから、残りのパイプライン ステージにデータを送信します。 (ID3D11DeviceContext::IASetPrimitiveTopology メソッドを使用して、入力アセンブラー ステージのプリミティブ型を指定できます)。

プリミティブ隣接性

Direct3D 10 以降のすべてのプリミティブ型 (ポイント リストを除く) は、隣接性を持つプリミティブ型と隣接しないプリミティブ型の 2 つのバージョンで使用できます。 隣接性を持つプリミティブには周囲の頂点の一部が含まれますが、隣接性のないプリミティブにはターゲット プリミティブの頂点のみが含まれます。 たとえば、(D3D_PRIMITIVE_TOPOLOGY_LINELIST 値で表される) 行リスト プリミティブには、隣接性 (D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ 値で表される) を含む対応する行リスト プリミティブがあります。

隣接するプリミティブは、ジオメトリに関する詳細情報を提供することを目的としており、ジオメトリ シェーダーを介してのみ表示されます。 隣接性は、シルエット検出、シャドウ ボリュームの浮き出しなどを使用するジオメトリ シェーダーに役立ちます。

たとえば、隣接性を持つ三角形リストを描画するとします。 隣接性を持つ 36 個の頂点を含む三角形リストでは、完成したプリミティブが 6 つ生成されます。 隣接性を持つプリミティブ (ライン ストリップを除く) には、隣接性のない同等のプリミティブの 2 倍の頂点が含まれています。各追加の頂点は隣接する頂点です。

巻き方向と先行頂点の位置

次の図に示すように、先頭の頂点はプリミティブ内の最初の非隣接頂点です。 プリミティブ型は、それぞれが異なるプリミティブに使用されている限り、複数の先行頂点を定義できます。 隣接性を持つ三角形ストリップの場合、先頭の頂点は 0、2、4、6 などです。 隣接性のあるライン ストリップの場合、先頭の頂点は 1、2、3 などです。 一方、隣接するプリミティブには先頭の頂点がありません。

次の図は、入力アセンブラーが生成できるすべてのプリミティブ型の頂点の順序を示しています。

プリミティブ型の頂点の順序付けの図

前の図の記号を次の表に示します。

記号 名前 形容
頂点する 頂点 3D 空間内のポイント。
巻き方向記号 巻き方向 プリミティブをアセンブルするときの頂点の順序。 時計回りまたは反時計回りにできます。ID3D11Device1::CreateRasterizerState1呼び出して、これを指定します。
先頭の頂点シンボル 先頭の頂点 定数ごとのデータを含むプリミティブ内の最初の非隣接頂点。

 

複数のストリップの生成

ストリップ切断を介して複数のストリップを生成することができます。 ストリップ カットを実行するには、RestartStrip HLSL 関数を明示的に呼び出すか、インデックス バッファーに特殊なインデックス値を挿入します。 この値は -1 で、32 ビット インデックスの場合は0xffffffff、16 ビット インデックスの場合は0xffffです。 インデックス –1 は、現在のストリップの明示的な 'cut' または 'restart' を示します。 前のインデックスは前のプリミティブまたはストリップを完了し、次のインデックスは新しいプリミティブまたはストリップを開始します。 複数のストリップの生成の詳細については、「Geometry-Shader ステージ」を参照してください。

手記

10.0 以上のハードウェア 機能レベル 必要があります。10level9 のすべてのハードウェアでこの機能が実装されているわけではありません。

 

Input-Assembler ステージ の概要

パイプライン ステージ (Direct3D 10)