Platform SDK: DirectX

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

レンダリング メソッドに渡す頂点記述に D3DFVF_XYZ (または D3DFVF_XYZBn フラグのいくつか) および D3DFVF_NORMAL フラグがある場合、「未トランスフォーム 未ライティングの頂点」タイプが指定されている。「未トランスフォーム 未ライティングの頂点」を使用すると、アプリケーションは Direct3D にその内部アルゴリズムを使用してすべてのトランスフォーム & ライティング処理を実行するよう効率的に要求できる (必要であれば、D3DRENDERSTATE_LIGHTING レンダリング ステートを FALSE に設定して、レンダリングするプリミティブに対して Direct3D ライティング エンジンを無効にできる)。

この頂点タイプは、アプリケーションで独自のトランスフォーム & ライティング エンジンを実装する必要がないので、ほとんどのアプリケーションで使用される。ただし、システムによって自動的に計算が実行されるため、各頂点に対していくらかの情報を指定しておく必要がある。

[C++]

これらの条件以外では、その他の頂点成分を柔軟に使用 (または無視) できる。たとえば、ディフューズまたはスペキュラ色を未トランスフォームの頂点に含めることができる (これは DirectX 6.0 以前ではできなかった)。各頂点に個々の色を含めると、マテリアル カラーのみ使用したライティング計算を実行するよりも、ずっと繊細で柔軟なシェーディング エフェクトが得られる。ただし、この場合、D3DRENDERSTATE_COLORVERTEX レンダリング ステートを使用して個々の頂点色を有効にする必要がある。また、未トランスフォーム 未ライティングの頂点には、最大 8 つまでテクスチャ座標セットを含めることができる。

アプリケーションでは、頂点に対して従来の D3DVERTEX 構造体も使用できる。実際、この頂点フォーマットを識別するショートカット マクロが、d3dtypes.h ヘッダー ファイルに定義されている。

#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 ) 
 

D3DVERTEX 構造体がアプリケーションの要件に合わないときは、その要件を満たすように独自に定義できる。ただし、どの頂点成分がアプリケーションで必要であるかに注意し、必ず正しく順序付けた構造体を宣言して、必要な順序で頂点成分が表示されるようにしなければならない。次のコードは、位置座標、頂点法線、ディフューズ色、および 2 つのテクスチャ座標セットを含む有効な頂点フォーマット構造体を宣言する。

//
// この頂点の頂点フォーマット記述は、
// (D3DFVF_XY | D3DFVF_NORMAL |// D3DFVF_DIFFUSE | D3DFVF_TEX2)
// になる。
//
typedef struct _UNLITVERTEX {
float x, y, z;        // 位置座標
    
float nx, ny, nz;     // 法線
    
DWORD dwDiffuseRGBA;  // ディフューズ色
 
float tu1,    // テクスチャ座標
tv1;
 
float tu2,
tv2;
} UNLITVERTEX, *LPUNLITVERTEX;

この構造体の頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZ、D3DFVF_NORMAL、D3DFVF_DIFFUSE、および D3DFVF_TEX2 の組み合わせになる。IDirect3DDevice7::DrawPrimitive などのレンダリング メソッドは、頂点配列のアドレスを void 型のポインタとして受け取るので、レンダリング メソッドを呼び出すときは、頂点配列ポインタを LPVOID データ型にキャストしなければならない。

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

[Visual Basic]

これらの条件以外では、その他の頂点成分を柔軟に使用 (または無視) できる。たとえば、ディフューズまたはスペキュラ色を未トランスフォームの頂点に含めることができる (これは DirectX 6.0 以前ではできなかった)。各頂点に個々の色を含めると、マテリアル カラーのみ使用したライティング計算を実行するよりも、ずっと繊細で柔軟なシェーディング エフェクトが得られる。ただし、この場合、D3DRENDERSTATE_COLORVERTEX レンダリング ステートを使用して個々の頂点色を有効にする必要がある。また、未トランスフォーム 未ライティングの頂点には、最大 8 つまでテクスチャ座標セットを含めることができる。Visual Basic アプリケーションでは、頂点に D3DVERTEX 型を使用できる。

D3DVERTEX 型がアプリケーションの要件に合わないときは、その要件を満たすように独自に定義ができる。ただし、どの頂点成分がアプリケーションで必要であるかに注意し、必ず正しく順序付けた構造体を宣言して、必要な順序で頂点成分が表示されるようにしなければならない。次のコードは、位置座標、頂点法線、ディフューズ色、および 2 つのテクスチャ座標セットを含む有効な頂点フォーマット構造体を宣言する。

'
// この頂点の頂点フォーマット記述は、
// (D3DFVF_XYZ Or D3DFVF_NORMAL Or D3dFVF_DIFFUSE Or D3DFVF_TEX2)(D3DFVF_XYZ Or D3DFVF_NORMAL Or
// になる。
'
Type UNLITVERTEX
x As Single ' 位置座標
y As Single
z As Single
    
nx As Single ' 法線
ny As Single
nz As Single
   
DiffuseRGBA As Long  ' ディフューズ色
 
tu1 As Single ' テクスチャ座標
tv1 As Single
 
tu2 As Single ' テクスチャ座標
tv2 As Single
End Type

この構造体の頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZ、D3DFVF_NORMAL、D3DFVF_DIFFUSE、および D3DFVF_TEX2 の組み合わせになる。Direct3DDevice7.DrawPrimitive などのレンダリング メソッドは、頂点配列の第 1 要素を型 Any として受け取り、すべての種類の頂点フォーマットを格納する。

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