テクスチャ座標形式 (Direct3D 9)
Direct3D のテクスチャ座標には、次元のレベルが異なるテクスチャに対応するために、1 つ、2 つ、3 つ、または 4 つの浮動小数点要素を含めることができます。 1D テクスチャ (1 x n テクセルの寸法を持つテクスチャ サーフェス) は、1 つのテクスチャ座標で対処されます。 最も一般的なケースである 2D テクスチャは、一般的に you と v と呼ばれる 2 つのテクスチャ座標で対処されます。 Direct3D では、立方環境マップとボリューム テクスチャの 2 種類の 3D テクスチャがサポートされています。 立方環境マップは実際には 3D ではありませんが、3 要素ベクトルで対処されます。 詳細については、「 立方環境マッピング (Direct3D 9)」を参照してください。
「固定関数 FVF コード (Direct3D 9)」で説明されているように、アプリケーションはテクスチャ座標を頂点形式でエンコードします。 頂点形式には、テクスチャ座標の複数のセットを含めることができます。 D3DFVF D3DFVF_TEX8 D3DFVF_TEX0を使用して、テクスチャ座標を含まない頂点形式、または最大 8 セットの頂点形式を記述します。
各テクスチャ座標セットには、1 から 4 つの要素を含めることができます。 D3DFVF_TEXTUREFORMAT4 フラグを使用したD3DFVF_TEXTUREFORMAT1では、セット内のテクスチャ座標内の要素の数が記述されますが、これらのフラグは単独では使用されません。 代わりに、 マクロのD3DFVF_TEXCOORDSIZEN セットは、これらのフラグを使用して、頂点形式の特定のテクスチャ座標セットで使用される要素の数を記述するビット パターンを作成します。 これらのマクロは、要素の数が定義されている座標セットのインデックスを識別する 1 つのパラメーターを受け入れます。 次の例は、これらのマクロの使用方法を示しています。
// This vertex format contains two sets of texture coordinates.
// 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, 2D
float t; // 2nd set, 1D
} CustomVertexFormat;
Note
立方環境マップとボリューム テクスチャを除き、ラスタライザーは 2 つ以上の要素を使用してテクスチャに対処することはできません。 アプリケーションでは、テクスチャ座標に最大 3 つの要素を指定できますが、テクスチャがキューブ マップ、ボリューム テクスチャ、またはD3DTTFF_PROJECTED テクスチャ変換フラグが使用されている場合にのみ使用できます。 D3DTTFF_PROJECTED フラグを指定すると、ラスタライザーは最初の 2 つの要素を 3 番目の (または n) 要素で除算します。 詳細については、「 テクスチャ座標変換 (Direct3D 9)」を参照してください。
関連トピック