テクスチャ座標フォーマット
テクスチャ座標フォーマット
Microsoft® Direct3D® のテクスチャ座標には、1、2、3、または 4 つの浮動小数点要素を含めて、さまざまな大きさのテクスチャを処理できる。1D テクスチャ (大きさが 1 × n テクセルのテクスチャ サーフェイス) の場合は、1 つのテクスチャ座標で処理される。最も一般的な 2D テクスチャの場合は、通常 u と v と呼ばれる 2 つのテクスチャ座標によって処理される。Direct3D では、キューブ環境マップとボリューム テクスチャの 2 種類の 3D テクスチャをサポートしている。キューブ環境マップは、実際には 3D ではないが、3 要素ベクトルによって処理される。詳細については、「キューブ環境マップ」を参照すること。
「頂点フォーマット」で説明するように、アプリケーションは頂点フォーマット内にテクスチャ座標をエンコードする。頂点フォーマットにはテクスチャ座標の複数のセットを格納できる。D3DFVF_TEX0 ~ D3DFVF_TEX8 の D3DFVF を使って、頂点フォーマットにテクスチャ座標を含めないか、最大 8 つのセットまで含めることを指定する。
各テクスチャ座標セットには、1 ~4 つの要素を含めることができる。D3DFVF_TEXTUREFORMAT1 ~ D3DFVF_TEXTUREFORMAT4 フラグは、テクスチャ座標セット内にある要素の個数を記述するが、これらのフラグは単独では使わない。その代わり、これらのフラグは、頂点フォーマットの特定のテクスチャ座標セットで使う要素の個数を記述するビット パターンを作成する、マクロ D3DFVF_TEXCOORDSIZEn セットを使う。これらのマクロは、要素数を定義する座標セットのインデックスを識別するパラメータを 1 つ受け取る。次の例は、これらのマクロの使用方法を示している。
// この頂点フォーマットには、2 つのテクスチャ座標セットが含まれている。
// The first set (index 0) has 2 elements, and the second set
// has 1 element.The description for this vertex format would be:
// 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; // 1st set, 2-D
float t; // 2nd set, 1-D
} CustomVertexFormat;
注 キューブ環境マップとボリューム テクスチャを除き、ラスタライザでは 3 つ以上の要素を使ってテクスチャを処理することはできない。アプリケーションではテクスチャ座標に最大 3 つまで要素を指定できるが、これが可能なのは、テクスチャがキューブ マップまたはボリューム テクスチャの場合か、D3DTTFF_PROJECTED テクスチャ トランスフォーム フラグが使われている場合のみである。D3DTTFF_PROJECTED フラグが使われている場合、ラスタライザは最初の 2 つの要素を 3 番目 (または n 番目) の要素で除算する。詳細については、「テクスチャ座標トランスフォーム」を参照すること。