Microsoft DirectX 8.0 (C++)

未トランスフォーム ライティング済みの頂点

Microsoft® Direct3D® レンダリング メソッドで使用する頂点フォーマット記述に D3DFVF_XYZ フラグを含め、D3DFVF_NORMAL フラグを含めていない場合、その頂点は「未トランスフォーム ライティング済みの頂点」として識別される。フラグの依存および排他関係の詳細については、「柔軟な頂点フォーマット フラグ」を参照すること。

「未トランスフォーム ライティング済みの頂点」を使用すると、アプリケーションは Direct3D に頂点に対するライティング計算を実行しないように要求するが、Direct3D は以前に設定されたワールド行列、ビュー行列、および射影行列を使用して頂点をトランスフォームする。ライティング計算は実行されないので、頂点法線は必要ない。システムは、各頂点のディフューズ成分とスペキュラ成分をシェーディングに使用する。これらの色は任意に指定しても、独自のライティング公式を使用して計算してもよい。ディフューズ成分またはスペキュラ成分を含めない場合は、デフォルト カラーが使用される。ディフューズ色のデフォルト値は 0xFFFFFFFF で、スペキュラ色のデフォルト値は 0x0 である。

位置座標といくらかの色情報を含めるという点を除いては、その他の頂点タイプと同様、未ライティングの頂点フォーマットにテクスチャ座標セットを含めたり、無視することができる。

独自の頂点フォーマットを定義するときは、どの頂点の成分がアプリケーションで必要であるかに注意し、必ず正しく順序付けた構造体を宣言して、必要な順序で頂点の成分が表示されるようにしなければならない。次のサンプル コードは、ディフューズ頂点カラー、スペキュラ頂点カラー、および 3 つのテクスチャ座標セットを持つ、未トランスフォームでライティング済みの有効な頂点を宣言する。

//
// この頂点の頂点フォーマット記述は、
// (D3DFVF_XYZ | D3DFVF_DIFFUSE |  D3DFVF_SPECULAR | D3DFVF_TEX3) になる。
//
typedef struct _LITVERTEX {
    float x, y, z;   // 位置座標
    DWORD Diffuse;   // ディフューズ色
    DWORD Specular;  // スペキュラ色
    float tu1, tv1;  // テクスチャ座標
    float tu2, tv2;
    float tu3, tv3;
} LITVERTEX, *LPLITVERTEX; 

この構造体の頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZ、D3DFVF_DIFFUSE、D3DFVF_SPECULAR、および D3DFVF_TEX3 の組み合わせになる。

詳細については、「頂点フォーマットについて」を参照すること。