次の方法で共有


テクスチャ座標 (Direct3D 9)

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

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

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

テクセルを画面空間にマッピングする

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

テクスチャ内の各テクセルは、そのテクセル座標で指定できます。 ただし、テクセルをプリミティブにマップするには、Direct3D では、すべてのテクスチャ内のすべてのテクセルに対して均一なアドレス範囲が必要です。 したがって、すべてのテクセル アドレスが 0.0 ~ 1.0 の範囲である汎用アドレス指定スキームを使用します。 Direct3D アプリケーションでは、x、y 座標の観点から 2D デカルト座標が指定されるのと同様に、テクスチャ座標をユーザー、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 テクスチャ