テクスチャ座標 (Direct3D 9)

ほとんどのテクスチャ (ビットマップなど) は、色値の 2 次元配列です。 立方環境マップ テクスチャは例外です。 詳細については、「 立方環境マッピング (Direct3D 9)」を参照してください。 個々の色の値は、テクスチャ要素 (テクセル) と呼ばれます。 各テクセルには、テクスチャ内に一意のアドレスがあります。 このアドレスは列と行番号と見なすことができます。この番号には、次の図でそれぞれ you と v というラベルが付きます。

テクセル アドレスを列番号と行番号として示す図

テクスチャ座標はテクスチャ空間にあります。 つまり、テクスチャ内の位置 (0,0) を基準とします。 テクスチャを 3D 空間のプリミティブに適用する場合、そのテクセル アドレスをオブジェクト座標にマップする必要があります。 その後、画面座標またはピクセル位置に変換する必要があります。

テクセルを画面領域にマッピングする

Direct3D は、テクスチャ空間のテクセルを画面空間のピクセルに直接マップし、中間ステップをスキップして効率を向上させます。 このマッピング プロセスは、実際には逆マッピングです。 つまり、画面空間内の各ピクセルについて、テクスチャ空間における対応するテクセル位置が計算される。 その点またはその周辺のテクスチャの色がサンプリングされます。 サンプリング プロセスはテクスチャ フィルタリングと呼ばれます。 詳細については、「 テクスチャ フィルタリング (Direct3D 9)」を参照してください。

テクスチャ内の各テクセルは、そのテクセル座標で指定できます。 ただし、テクセルをプリミティブにマップするには、Direct3D では、すべてのテクスチャ内のすべてのテクセルに対して均一なアドレス範囲が必要です。 したがって、すべてのテクセル アドレスが 0.0 ~ 1.0 の範囲にある汎用アドレス指定スキームを使用します。 Direct3D アプリケーションでは、2D デカルト座標が x、y 座標の観点から指定されるのと同様に、テクスチャ座標をユーザー、v 値の観点から指定します。 技術的には、システムは実際には 0.0 と 1.0 の範囲外のテクスチャ座標を処理でき、テクスチャ アドレッシングに設定したパラメーターを使用して処理できます。 詳細については、「 テクスチャ アドレス指定モード (Direct3D 9)」を参照してください。

その結果、同じテクスチャ アドレスが異なるテクスチャ内の異なるテクセル座標にマップされる可能性があります。 次の図では、テクスチャ アドレスは (0.5,1.0) です。 ただし、テクスチャのサイズが異なるため、テクスチャ アドレスは異なるテクセルにマップされます。 左側のテクスチャ 1 は 5 x 5 です。 テクスチャ アドレス (0.5,1.0) はテクセル (2,4) にマップされます。 右側のテクスチャ 2 は 7 x 7 です。 テクスチャ アドレス (0.5,1.0) はテクセル (3,6) にマップされます。

異なるテクスチャ上の異なるテクセルへの同じテクスチャ アドレス マッピングの図

テクセル マッピング プロセスの簡略化されたバージョンを次の図に示します。 確かに、この例は非常に単純です。 詳細については、「 テクセルをピクセルに直接マッピングする (Direct3D 9)」を参照してください。

オブジェクト空間にマップされるピクセル (色の正方形) の図

この例では、図の左側に表示されるピクセルは、2 乗の色に理想化されます。 ピクセルの四隅のアドレスは、オブジェクト空間の 3D プリミティブにマップされます。 ピクセルの形状は、多くの場合、3D 空間のプリミティブの形状と、視野角のために歪んでいます。 ピクセルの角に対応するプリミティブ上のサーフェス領域の角は、テクスチャ空間にマップされます。 マッピング プロセスでは、ピクセルの図形が再び歪みます。これは一般的です。 ピクセルの最終的な色の値は、ピクセルがマップされる領域内のテクセルから計算されます。 テクスチャ フィルター方法を設定するときに、Direct3D がピクセルの色に到達するために使用する方法を決定します。 詳細については、「 テクスチャ フィルタリング (Direct3D 9)」を参照してください。

アプリケーションでは、テクスチャ座標を頂点に直接割り当てることができます。 この機能を使用すると、テクスチャのどの部分をプリミティブにマップするかを制御できます。 たとえば、次の図のテクスチャとまったく同じサイズの四角形プリミティブを作成するとします。 この例では、アプリケーションでテクスチャ全体を壁全体にマップします。 アプリケーションがプリミティブの頂点に割り当てるテクスチャ座標は、(0.0,0.0)、(1.0,0.0)、(1.0,1.0)、および (0.0,1.0) です。

テクスチャ マップされた壁の図

壁の高さを半分に減らす場合は、小さな壁に収まるようにテクスチャを歪めることも、Direct3D がテクスチャの下半分を使用する原因となるテクスチャ座標を割り当てることもできます。

小さな壁に合わせてテクスチャを歪めたり拡大縮小したりすると、使用するテクスチャ フィルタリング方法がイメージの品質に影響します。 詳細については、「 テクスチャ フィルタリング (Direct3D 9)」を参照してください。

代わりに、テクスチャ座標を割り当てて Direct3D が小さい壁のテクスチャの下半分を使用するようにする場合、この例のプリミティブの頂点にアプリケーションが割り当てるテクスチャ座標は (0.0,0.5)、(1.0,0.5)、(1.0,1.0)、(0.0,1.0) になります。 Direct3D は、テクスチャの下半分を壁に適用します。

頂点のテクスチャ座標が 1.0 より大きくなる可能性があります。 0.0 ~ 1.0 の範囲にない頂点にテクスチャ座標を割り当てる場合は、テクスチャ アドレッシング モードも設定する必要があります。 詳細については、「 テクスチャ アドレス指定モード (Direct3D 9)」を参照してください。

テクスチャ座標とテクスチャ ステージ

テクスチャ座標は、テクスチャ ステージを使用してテクスチャに関連付けられます。 テクスチャは、SetTexture(stageIndex, pTexture) を使用してテクスチャ ステージに割り当てられます。 「IDirect3DDevice9::SetTexture」を参照してください。

フレキシブル頂点形式 (FVF) コードでは、最大 8 セットのテクスチャ座標を定義できます。 テクスチャ座標データは、頂点データのユーザーによって提供されます。 データは、0 から 7 の 0 から始まるインデックスで参照されます。 テクスチャ ブレンド ステージは最大 8 つあります。 テクスチャは、SetTexture( stageIndex, pTexture) を使用して特定のステージに関連付けられます。

これを行うと、テクスチャ座標のセットを任意のステージで使用できます。 各座標セットは、SetTextureStageState( stageIndex, D3DTSS_TEXCOORDINDEX, textureCoordinateIndex ) を使用してステージに関連付けられます。 「IDirect3DDevice9::SetTextureStageState」を参照してください。 これにより、ブレンド ステージは、任意のテクスチャと任意のテクスチャ座標を使用するように設定できます。 複数のステージで同じテクスチャまたはテクスチャ座標を使用できます。

追加情報については、次のトピックを参照してください。

Direct3D テクスチャ