柔軟な頂点フォーマット フラグ
柔軟な頂点フォーマット (FVF) は、単一のデータ ストリームにインターリーブされて格納されている頂点のコンテンツを記述するために使われる。FVF コードは、通常、固定機能の頂点処理によって処理されるデータを指定するために使われる。
頂点のフォーマットは、次のフラグによって記述される。頂点フォーマットについては、「頂点フォーマットについて」を参照すること。
- 柔軟な頂点フォーマット (FVF) フラグ
- D3DFVF_DIFFUSE
- 頂点フォーマットがディフューズ色成分を含む。
- D3DFVF_NORMAL
- 頂点フォーマットが頂点法線ベクトルを含む。このフラグを、D3DFVF_XYZRHW と共に使用することはできない。
- D3DFVF_PSIZE
- 頂点フォーマットはポイント サイズで指定されている。このサイズは、トランスフォーム済みでもライティング済みでもない頂点に対するカメラ空間単位、およびトランスフォーム済みでライティング済みの頂点に対するデバイス空間単位で表されている。
- D3DFVF_SPECULAR
- 頂点フォーマットがスペキュラ色成分を含む。
- D3DFVF_XYZ
- 頂点フォーマットが未トランスフォーム頂点の位置座標を含む。このフラグを、D3DFVF_XYZRHW と共に使用することはできない。
- D3DFVF_XYZRHW
- 頂点フォーマットが、トランスフォームされた頂点の位置座標を含む。このフラグを D3DFVF_XYZ または D3DFVF_NORMAL フラグと同時に使用することはできない。
- D3DFVF_XYZB1 〜 D3DFVF_XYZB5
- 頂点フォーマットは、位置座標データ、および複数の行列による頂点ブレンディング処理用の加重 (ベータ) 値の対応数を含む。現在、Microsoft® Direct3D® では最大 3 つの加重値および 4 つのブレンディング行列でブレンディングが可能である。ブレンディング行列の使い方の詳細については、「インデックス付き頂点ブレンディング」を参照すること。
- テクスチャ関連 FVF フラグ
- D3DFVF_TEX0 〜 D3DFVF_TEX8
- この頂点に対応するテクスチャ座標セットの番号。これらのフラグに対応する数字は連続番号になっていない。
- D3DFVF_TEXTUREFORMAT1 〜 D3DFVF_TEXTUREFORMAT4
- テクスチャ座標セットを定義する値の番号。D3DFVF_TEXTUREFORMAT1 は 1 次元座標を示し、D3DFVF_TEXTUREFORMAT2 は 2 次元座標を示し、という順に以下続く。このフラグが単独で使用されることはまれで、D3DFVF_TEXCOORDSIZEn マクロと共に使用される。
- マスク値
- D3DFVF_POSITION_MASK
- 位置座標ビットを抽出するマスク。
- D3DFVF_RESERVED0 および D3DFVF_RESERVED2
- 柔軟な頂点フォーマットの予約ビットを抽出するためのマスク値。使用不可。
- D3DFVF_TEXCOUNT_MASK
- テクスチャ フラグ ビットを抽出するためのマスク値。
- その他
- D3DFVF_LASTBETA_UBYTE4
- インデックス付き頂点ブレンディングと固定機能 FVF 頂点シェーダを使用する場合は、頂点シェーダにこのフラグを指定しなければならない。
- D3DFVF_TEXCOUNT_SHIFT
- 頂点のテクスチャ座標数を識別する整数値を何ビット分シフトするかを示す数。この値は、たとえば次のように使用する。
DWORD dwNumTextures = 1; // 頂点には座標セットが
// 1 つだけある。
// FVF の組み合わせを作るときに、値をシフトさせて使用する。
dwFVF = dwNumTextures<<D3DFVF_TEXCOUNT_SHIFT;
/*
* シフト後の値を使い、ここで FVF の組み合わせを作成する。
*/
よく使われるフラグの組み合わせ例を次に示す。
// ライティングされ、テクスチャの付かない、グーローシェーディングされたコンテンツのための、
// 軽い未トランスフォーム頂点。
dwFVF = ( D3DFVF_XYZ | D3DFVF_DIFFUSE );
// ライティングなし、テクスチャなし、グーロー シェーディングあり。
// 頂点ごとにディフーズ マテリアル色が指定されている未トランスフォーム頂点。
dwFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE );
// ライト マップ ベースのライティングに対する未トランスフォーム頂点。
dwFVF = ( D3DFVF_XYZ | D3DFVF_TEX2 );
// ライト マップ ベースのライティングに対するトランスフォーム済み頂点。
// 共有 rhw あり。
dwFVF = ( D3DFVF_XYZRHW | D3DFVF_TEX2 );
// 2 つのテクスチャ座標セットを備えた、
// 未ライティングで、色付きのコンテンツに対する重い頂点。
dwFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE |
D3DFVF_SPECULAR | D3DFVF_TEX2 );
参照
頂点フォーマットについて、ジオメトリ ブレンディング