Share via


テクスチャー フィルタリング (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 を渡して、拡大、縮小、またはミップマップ フィルターを設定します。3 番目のパラメーターの値として、D3DTEXTUREFILTERTYPE 列挙型のメンバーを渡します。

ここでは、Direct3D でサポートされるテクスチャー フィルタリングの方法について説明します。説明するトピックは、次のとおりです。

    D3DRENDERSTATETYPE 列挙型にあるテクスチャー フィルタリング レンダリング ステートは、テクスチャー ステージ ステートに置き換えられていますが、IDirect3DDevice2 バージョンとは対照的に、使用しようとしても IDirect3DDevice9::SetRenderState が失敗することはありません。代わりに、これらのレンダリング ステートのエフェクトがマルチテクスチャー カスケードの最初のステージ (ステージ 0) にマッピングされます。アプリケーションでは、従来のレンダリング ステートを対応するテクスチャー ステージ ステートと併用することはできません。予期しない結果が生じる恐れがあります。