柔軟な頂点フォーマット フラグ
Direct3D 直接モードはフラグの値を使って、DrawPrimitive 準拠のレンダリングで使用する頂点フォーマットを表現する。d3dtypes.h ヘッダー ファイルは、以下に示すように、頂点フォーマットを明示的に記述するフラグを宣言する。また、これらのフラグの一般的な組み合わせとしての機能を持つヘルパー マクロを提供する。詳細については、「頂点フォーマットについて」を参照すること。
- 柔軟な頂点フォーマット (FVF) フラグ
- D3DFVF_DIFFUSE
- 頂点フォーマットがディフーズ色成分を含む。
- D3DFVF_NORMAL
- 頂点フォーマットが頂点法線ベクトルを含む。このフラグを、D3DFVF_XYZRHW と共に使用することはできない。
- D3DFVF_SPECULAR
- 頂点フォーマットがスペキュラ色成分を含む。
- D3DFVF_XYZ
- 頂点フォーマットが未トランスフォーム頂点の位置座標を含む。このフラグを、D3DFVF_XYZRHW と共に使用することはできない。このフラグを使用する場合は、同時に頂点法線と頂点色成分 (D3DFVF_DIFFUSE または D3DFVF_SPECULAR) を指定するか、または少なくとも 1 セットのテクスチャ座標 (D3DFVF_TEX1 から D3DFVF_TEX8) を含める必要がある。
- D3DFVF_XYZRHW
- 頂点フォーマットが、トランスフォームされた頂点の位置座標を含む。このフラグを D3DFVF_XYZ または D3DFVF_NORMAL フラグと同時に使用することはできない。このフラグを使用する場合は、同時に頂点色成分 (D3DFVF_DIFFUSE または D3DFVF_SPECULAR) を指定するか、または少なくとも 1 セットのテクスチャ座標 (D3DFVF_TEX1 から D3DFVF_TEX8) を含める必要がある。
- D3DFVF_XYZB1 から D3DFVF_XYZB5
- 頂点フォーマットは、位置座標データ、および複数の行列による頂点ブレンディング処理用の加重 (ベータ) 値の対応数を含む。現在、Direct3D では最大 3 つの加重値 (および 4 つのブレンディング行列) でブレンディングが可能である。
- テクスチャ関連 FVF フラグ
- D3DFVF_TEX0 から D3DFVF_TEX8
- この頂点に対応するテクスチャ座標セットの番号。これらのフラグに対応する数字は連続番号になっていない。
- D3DFVF_TEXTUREFORMAT1 から D3DFVF_TEXTUREFORMAT4
- テクスチャ座標セットを定義する値の番号。D3DFVF_TEXTUREFORMAT1 は 1 次元座標を示し、D3DFVF_TEXTUREFORMAT2 は 2 次元座標を示し、という順に以下続く。このフラグが単独で使用されることはまれで、D3DFVF_TEXCOORDSIZEn マクロと共に使用される。
- ヘルパー マクロ
- D3DFVF_LVERTEX
- 頂点フォーマットは D3DLVERTEX 頂点タイプに対応する。
- D3DFVF_TLVERTEX
- 頂点フォーマットは D3DTLVERTEX 頂点タイプに対応する。
- D3DFVF_VERTEX
- 頂点フォーマットは D3DVERTEX 頂点タイプに対応する。
- マスク値
- D3DFVF_POSITION_MASK
- 位置座標ビットを抽出するマスク。
- D3DFVF_RESERVED0 and D3DFVF_RESERVED2
- 柔軟な頂点フォーマットの予約ビットを抽出するためのマスク値。使用不可。
- D3DFVF_RESERVED1,
- このビットは、システムが D3DLVERTEX 処理をエミュレートすることを示すために予約されている。このフラグを使用する場合は、D3DFVF_XYZ、D3DFVF_DIFFUSE、D3DFVF_SPECULAR、および D3DFVF_TEX1 フラグも同時に使用しなければならない。これは、D3DFVF_LVERTEX ヘルパー マクロを使うのと実質的に同じである。
- D3DFVF_TEXCOUNT_MASK
- テクスチャ フラグ ビットを抽出するためのマスク値。
- その他
- 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 );
参照
頂点フォーマットについて、ジオメトリ ブレンディング