テクスチャー座標フォーマット (Direct3D 9)
Direct3D のテクスチャー座標では、1 ~ 4 つの浮動小数点要素を含めることで、さまざまな次元のテクスチャーを処理できます。1D テクスチャー (サイズが 1 × n テクセルのテクスチャー サーフェス) は、1 つのテクスチャー座標によって処理されます。最も一般的な 2D テクスチャーは、通常 u および v と呼ばれる 2 つのテクスチャー座標によって処理されます。Direct3D では、キューブ環境マップとボリューム テクスチャーという 2 種類の 3D テクスチャーがサポートされています。キューブ環境マップは、正確には 3D ではありませんが、3 要素ベクトルに対応します。詳細については、「キューブ環境マッピング (Direct3D 9)」を参照してください。
「固定機能 FVF コード (Direct3D 9)」に記載されているように、アプリケーションは、頂点フォーマットでテクスチャー座標をエンコードします。頂点フォーマットには、複数のテクスチャー座標を含めることができます。D3DFVF_TEX0 ~ D3DFVF_TEX8 の D3DFVF を使用して、テクスチャー座標を含まない頂点フォーマットから 8 個のテクスチャー座標を含む頂点フォーマットまで定義できます。
各テクスチャー座標系は、1 ~ 4 つの要素を持つことができます。D3DFVF_TEXTUREFORMAT1 ~ D3DFVF_TEXTUREFORMAT4 フラグによって、1 つのテクスチャー座標系の要素数が定義されますが、これらのフラグは単独では使用されません。代わりに、マクロの 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;
注 キューブ環境マップとボリューム テクスチャーを除き、ラスタライザーでは、3 つ以上の要素を使用してテクスチャーを処理することはできません。アプリケーションでは、1 つのテクスチャー座標に最大 3 つの要素を指定できますが、テクスチャーがキューブ マップまたはボリューム テクスチャーであるか、D3DTTFF_PROJECTED テクスチャー トランスフォーム フラグが使用されている場合のみです。D3DTTFF_PROJECTED フラグを使用すると、ラスタライザーによって最初の 2 つの要素が 3 番目 (または n 番目) の要素で除算されます。詳細については、「テクスチャー座標トランスフォーム (Direct3D 9)」を参照してください。