Platform SDK: DirectX |
Direct3D レンダリング メソッドで使用する頂点フォーマット記述に D3DFVF_XYZ フラグを含め、D3DFVF_NORMAL フラグを含めていない場合、その頂点は「未トランスフォーム ライティング済みの頂点」として識別される (フラグの依存および排他関係の詳細については、「柔軟な頂点フォーマット フラグ」を参照すること)。
「未トランスフォーム ライティング済みの頂点」を使用すると、アプリケーションは Direct3D に頂点に対するライティング計算を実行しないように要求するが、Direct3D は以前に設定されたワールド行列、ビュー行列、および射影行列を使用して頂点をトランスフォームする。ライティング計算は実行されないので、頂点法線は必要ない。システムは、各頂点のディフューズ成分とスペキュラ成分をシェーディングに使用する。これらの色は任意に指定しても、独自のライティング公式を使用して計算してもよい。ディフューズ成分またはスペキュラ成分を含めない場合は、デフォルト カラーが使用される。ディフューズ色のデフォルト値は 0xFFFFFFFF で、スペキュラ色のデフォルト値は 0x0 である。
位置座標といくらかの色情報を含めるという点を除いては、その他の頂点タイプと同様、未ライティングの頂点フォーマットにテクスチャ座標セットを含めたり、無視することができる。
C++ アプリケーションでは、頂点に対して従来の D3DLVERTEX 構造体も使用できる。d3dtypes.h ヘッダー ファイルには、D3DLVERTEX 構造体のフォーマットを記述するために使用できる、次のヘルパー マクロが定義されている。
#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \ D3DFVF_SPECULAR | D3DFVF_TEX1 )
ここで注意するのは、ヘルパー マクロには D3DLVERTEX 構造体を使用することをシステムに指示する D3DFVF_RESERVED1 フラグが含まれており、この構造体には dwReserved メンバが含まれていることである。D3DLVERTEX を使用するときにこのメンバが必要なのは、頂点フォーマットには通常予約済みのフィールドが含まれていないためである。D3DFVF_RESERVED1 フラグは、頂点の位置座標とディフューズ色頂点成分の間に未使用の DWORD が存在することをシステムに知らせる。
D3DLVERTEX 構造体にアプリケーションで必要なすべてのフィールドが含まれていない場合は、別の構造体を定義することができる。新しい構造体を宣言するときは、必ず頂点成分が正しい順序になるようにする。次のコードは、ディフューズ頂点色、スペキュラ頂点色、および 3 つのテクスチャ座標セットを持つ、未トランスフォームでライティング済みの有効な頂点を宣言する。
// // この頂点の頂点フォーマット記述は、 // (D3DFVF_XYZ | D3DFVF_DIFFUSE |// D3DFVF_SPECULAR | D3DFVF_TEX3) // になる。 // typedef struct _LITVERTEX { float x, y, z; // 位置座標 DWORD dwDiffuseRGBA; // ディフューズ色 DWORD dwSpecularRGBA; // スペキュラ色 float tu1, // テクスチャ座標 tv1; float tu2, tv2; float tu3, tv3; } LITVERTEX, *LPLITVERTEX;
この構造体の頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZ、D3DFVF_DIFFUSE、D3DFVF_SPECULAR、および D3DFVF_TEX3 の組み合わせになる。IDirect3DDevice7::DrawPrimitive などのレンダリング メソッドは、頂点配列のアドレスを void 型のポインタとして受け取るので、レンダリング メソッドを呼び出すときは、頂点配列ポインタを LPVOID データ型にキャストしなければならない。
詳細については、「頂点フォーマットについて」を参照すること。
Visual Basic で記述されたアプリケーションでは、独自の頂点フォーマットを定義しても、ライティングのある頂点に D3DLVERTEX 型を使用してもよい。D3DLVERTEX 型にアプリケーションで必要なすべてのフィールドが含まれていない場合は、別の型を定義することができる。新しい構造体を宣言するときは、必ず頂点成分が正しい順序になるようにする。次のコードは、ディフューズ頂点色、スペキュラ頂点色、および 3 つのテクスチャ座標セットを持つ、未トランスフォームでライティング済みの有効な頂点を宣言する。
' // この頂点の頂点フォーマット記述は、 // (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR Or D3DFVF_TEX3)(D3DFVF_XYZ Or D3DFVF_DIFFUSE Or // になる。 ' Type LITVERTEX x As Single ' 位置座標 y As Single z As Single DiffuseRGBA As Long ' ディフューズ色 SpecularRGBA As Long ' スペキュラ色 tu1 As Single ' テクスチャ座標 tv1 As Single tu2 As Single tv2 As Single tu3 As Single tv3 As Single End Type
この構造体での頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZ、D3DFVF_DIFFUSE、D3DFVF_SPECULAR、および D3DFVF_TEX3 の組み合わせになる。Direct3DDevice7.DrawPrimitive などのレンダリング メソッドは、頂点配列の第 1 要素を型 Any として受け取り、すべての種類の頂点フォーマットを格納する。
詳細については、「頂点フォーマットについて」を参照すること。