Platform SDK: DirectX

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

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

[C++]

頂点フォーマットについて」で説明するように、アプリケーションでは頂点フォーマット内のテクスチャ座標を符号化する。頂点フォーマットにはテクスチャ座標の複数のセットを含めることができる。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;
[Visual Basic]

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

各テクスチャ座標セットには、1 〜4 つの要素を含めることができる。この SDK 付属の Math.bas ソース ファイルにあるヘルパー関数 D3DFVF_TEXCOORDSIZEn セットを使用して、頂点フォーマットの特定のテクスチャ座標セットで使用される要素の個数を記述するビット パターンを作成する。これらのマクロは、要素数を定義する座標セットのインデックスを識別するパラメータを 1 つ受け取る。次の図は、これらのマクロの使用方法を示す。

Private Sub Form_Load()
' この頂点フォーマットには、2 つのテクスチャ座標セットが含まれている。
' 1 つ目のセット (インデックス 0) には 2 つの要素があり、2 つ目のセットには要素が 1 つある。
'
' この頂点フォーマットは次のように記述される。
'     lFVF = D3DFVF_XYZ Or D3DFVF_NORMAL Or _
'            D3DFVF_DIFFUSE Or D3DFVF_TEX2 Or _
'            D3DFVF_TEXCOORDSIZE2(0) Or D3DFVF_TEXCOORDSIZE1(1)
'
Type CustomVertexFormat
position As D3DVECTOR
normal As D3DVECTOR
diffuse  As D3DVECTOR
' 1 つ目のセット、2D
u As Single
v As Single
' 2 つ目のセット、1D
t As Single
End Type

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