テクスチャ フィルタリング (Direct3D 9)

Direct3D では、プリミティブをレンダリングするとき、3D プリミティブを 2D 画面にマッピングします。 プリミティブにテクスチャがある場合、Direct3D はそのテクスチャを必ず使用して、プリミティブの 2D レンダリングされた画像の各ピクセルのカラーを生成します。 プリミティブの画面上の画像のピクセルごとに、テクスチャからカラー値を取得する必要があります。 このプロセスは、テクスチャフィルタリングと呼ばれます。

テクスチャ フィルタリング処理が実行されるとき、使用されるテクスチャは通常、拡大または縮小されます。 つまり、テクスチャは、それ自体よりも大きいまたは小さいプリミティブ イメージにマッピングされます。 テクスチャの拡大では、多数のピクセルが 1 つのテクセルにマッピングされることがあります。 その結果、外観が粗くなる場合があります。 テクスチャが縮小されると、多くの場合、1 つのピクセルが多数のテクセルにマッピングされます。 その結果、イメージが不鮮明になったり、輪郭がギザギザになったりすることがあります。 このような問題を解決するには、ピクセルに適したカラーになるようにテクセルのカラーになんらかのブレンドを実行する必要があります。

Direct3D によって、テクスチャ フィルタリングの複雑なプロセスが単純化されます。 Direct3D には、線形フィルタリング、異方性フィルタリング、およびミップマップ フィルタリングという 3 種類のテクスチャ フィルタリングが用意されています。 テクスチャ フィルタリングを選択しなかった場合、Direct3D では最近点サンプリングという手法が使用されます。

それぞれのテクスチャ フィルタリングには、長所と短所があります。 たとえば、線形テクスチャ フィルタリングでは、最終イメージでエッジがギザギザになったり、外観が粗くなったりすることがあります。 ただし、このテクスチャ フィルタリングは計算処理のオーバーヘッドが少ない方法です。 ミップマップによるフィルタリングでは、通常、適切な結果が生成されます。特に、異方性フィルタリングと組み合わせた場合に結果がよくなります。 ただし、Direct3D でサポートされる方法の中で最も多くのメモリを必要とします。

テクスチャ インターフェイス ポインターを使用するアプリケーションでは、 IDirect3DDevice9::SetSamplerState メソッドを呼び出して、現在のテクスチャ フィルタリング メソッドを設定する必要があります。 最初のパラメーターの値を、テクスチャ フィルター方法を選択するテクスチャの整数インデックス番号 (0 から 7) に設定します。 2 番目のパラメーターにD3DSAMP_MAGFILTER、D3DSAMP_MINFILTER、またはD3DSAMP_MIPFILTERを渡して、倍率、縮小、またはミップマップ フィルターを設定します。 D3DTEXTUREFILTERTYPE 列挙型のメンバーを 3 番目のパラメーターの値として渡します。

このセクションでは、Direct3D でサポートされるテクスチャ フィルター方法について説明します。 これは、次のトピックに整理されています。

注意

D3DRENDERSTATETYPE 列挙型に存在するテクスチャ フィルターレンダリング状態はテクスチャ ステージの状態に置き換えられますが、IDirect3DDevice2 バージョンではなく IDirect3DDevice9::SetRenderState を使用しようとすると失敗しません。 代わりに、システムは、これらのレンダリング状態の効果をマルチテキスト カスケードのステージ 0 の最初のステージにマップします。 予期しない結果が発生する可能性があり、アプリケーションでは、レガシ のレンダリング状態と対応するテクスチャ ステージの状態を混在させるべきではありません。

 

Direct3D テクスチャ