Microsoft DirectX 8.0 (C++)

テクスチャ座標フォーマット

Microsoft® Direct3D® のテクスチャ座標には、1、2、3、または 4 つの浮動小数点要素を含めて、さまざまな大きさのテクスチャを処理できる。1D テクスチャ (大きさが 1 x n のテクスチャ サーフェス) の場合は、1 つのテクスチャ座標で処理される。最も一般的な 2D テクスチャの場合は、通常 u と v と呼ばれる 2 つのテクスチャ座標によって処理される。Direct3D では、キューブ環境マップという 3D テクスチャを 1 種類のみサポートしている。キューブ環境マップは、実際には 3D ではないが、3 要素ベクトルによって処理される。詳細については、「キューブ環境マップ」を参照すること。

頂点フォーマットについて」で説明するように、アプリケーションでは頂点フォーマット内のテクスチャ座標をエンコードする。頂点フォーマットにはテクスチャ座標の複数のセットを含めることができる。D3DFVF_TEX0 〜 D3DFVF_TEX8 柔軟な頂点フォーマット フラグを使用して、テクスチャ座標を含めないか、最大 8 つのセットまで含めることを指定する。

各テクスチャ座標セットには、1 〜4 つの要素を含めることができる。D3DFVF_TEXTUREFORMAT1 〜 D3DFVF_TEXTUREFORMAT4 フラグは、テクスチャ座標セット内にある要素の個数を記述するが、これらのフラグは単独では使用しない。その代わり、これらのフラグは、頂点フォーマットの特定のテクスチャ座標セットで使用される要素の個数を記述するビット パターンの作成のために、マクロの D3DFVF_TEXCOORDSIZEn セットで使用する。これらのマクロは、要素数を定義する座標セットのインデックスを識別するパラメータを 1 つ受け取る。次の図は、これらのマクロの使用方法を示している。

// この頂点フォーマットには、2 つのテクスチャ座標セットが含まれている。
// 1 つ目のセット (インデックス 0) には 2 つの要素があり、2 つ目のセットには
// 1 つの要素がある。' この頂点フォーマットは次のように記述される。 
//     dwFVF = D3DFVF_XYZ  | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX2 |
//             D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE1(1); 
typedef struct CVF
{
    D3DVECTOR position;
    D3DVECTOR normal;
    D3DCOLOR  diffuse;
    float     u, v;   // 1 つ目のセット、2D
    float     t;      // 2 つ目のセット、1D
} CustomVertexFormat;

  キューブ環境マップを除き、ラスタライザでは 3 つ以上の要素を使用してテクスチャを処理することはできない。アプリケーションではテクスチャ座標に最大 3 つまで要素を指定できるが、これが可能なのは、テクスチャがキューブ マップの場合か、D3DTTFF_PROJECTED テクスチャ トランスフォーム フラグが使用されている場合のみである。D3DTTFF_PROJECTED フラグが使用されている場合、ラスタライザは最初の 2 つの要素を 3 つ目 (または n つ目) の要素で除算する。詳細については、「テクスチャ座標トランスフォーム」を参照すること。