次の方法で共有


テクスチャ フィルタリング

テクスチャ フィルタリング

Microsoft® Direct3D® はプリミティブをレンダリングするとき、3D プリミティブを 2D スクリーンにマッピングする。プリミティブがテクスチャを持っている場合、Direct3D はそのテクスチャを使って、プリミティブの 2D レンダリング画像の各ピクセルの色を生成しなければならない。プリミティブのスクリーン上の画像のすべてのピクセルに対して、テクスチャから色値を取得しなければならない。この処理はテクスチャ フィルタリングと呼ばれる。

テクスチャ フィルタリング処理を実行するとき、使用するテクスチャは通常拡大または縮小される。つまり、テクスチャは、それ自体よりも大きなまたは小さなプリミティブ画像にマッピングされる。テクスチャの拡大によって、多数のピクセルが 1 つのテクセルにマッピングされることがある。この結果、画像が粗くなることがある。テクスチャの縮小では、多くの場合、単一のピクセルが多数のテクセルにマッピングされる。この結果、画像が不鮮明になったり、ぎざぎざができることがある。これらの問題を解決するには、1 ピクセルの色になるようにテクセル色のブレンディングを実行する必要がある。

Direct3D では、テクスチャ フィルタリングの複雑な処理を簡素化する。Direct3D では、線形フィルタリング、異方性フィルタリング、ミップマップ フィルタリングの 3 種類のテクスチャ フィルタリングを使える。テクスチャ フィルタリングを選択しない場合、Direct3D では最近点サンプリングという方法を使う。

それぞれのテクスチャ フィルタリングには、長所と短所がある。たとえば、線形テクスチャ フィルタリングを使った場合、最終的な画像でエッジがぎざぎざになったり、画質が粗くなることがある。しかし、このフィルタリングはオーバーヘッドが少ない。ミップマップによるフィルタリングを使うと、通常は最良の結果が得られる。特に、異方性フィルタリングと組み合わせて使用した場合はそうである。しかし、このフィルタリングは、Direct3D がサポートする方法の中で最もメモリを必要とするものである。

テクスチャ インターフェイス ポインタを使うアプリケーションでは、IDirect3DDevice9::SetSamplerState メソッドを呼び出して現在のテクスチャ フィルタリング方法を設定する必要がある。第 1 引数の値を、テクスチャ フィルタリング方法を選択するテクスチャの整数インデックス番号 (0 ~ 7) に設定する。第 2 引数として D3DSAMP_MAGFILTERD3DSAMP_MINFILTER、または D3DSAMP_MIPFILTER を渡して、拡大、縮小、またはミップマップ フィルタを設定する。第 3 引数の値として、D3DTEXTUREFILTERTYPE 列挙型のメンバを渡す。

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

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