Microsoft DirectX 8.0 (C++) |
Microsoft® Direct3D® はプリミティブをレンダリングするとき、3D プリミティブを 2D スクリーンにマッピングする。プリミティブがテクスチャを持っている場合、Direct3D はそのテクスチャを使用して、プリミティブの 2D レンダリング画像の各ピクセルの色を生成しなければならない。プリミティブのスクリーン上の画像のすべてのピクセルに対して、テクスチャからカラー値を取得しなければならない。この処理をテクスチャ フィルタリングと呼ぶ。
テクスチャ フィルタリング処理を実行するとき、使用するテクスチャは通常拡大または縮小される。つまり、テクスチャは、それ自体よりも大きなまたは小さなプリミティブ画像にマッピングされる。テクスチャの拡大によって、多数のピクセルが 1 つのテクセルにマッピングされることがある。この結果、画像が粗くなることがある。テクスチャの縮小では、多くの場合、単一のピクセルが多数のテクセルにマッピングされる。この結果、画像が不鮮明になったり、ぎざぎざができることがある。これらの問題を解決するには、ピクセルの色になるようにテクセル色のブレンディングを実行する必要がある。
Direct3D では、テクスチャ フィルタリングの複雑な処理を簡素化する。Direct3D では、線形フィルタリング、異方性フィルタリング、およびミップマップ フィルタリングの 3 種類のテクスチャ フィルタリングを使用できる。テクスチャ フィルタリングを選択しない場合、Direct3D では最近ポイント サンプリングという方法を使用する。
それぞれのテクスチャ フィルタリングには、長所と短所がある。たとえば、線形テクスチャ フィルタリングを使用した場合、最終的な画像でエッジがぎざぎざになったり、画質が粗くなることがある。しかし、このフィルタリングはオーバーヘッドが少ない。ミップマップによるフィルタリングを使用すると、通常は最良の結果が得られる。特に、異方性フィルタリングと組み合わせて使用した場合はそうである。しかし、このフィルタリングは、Direct3D がサポートする方法の中で最もメモリを必要とするものである。
テクスチャ インターフェイス ポインタを使用するアプリケーションでは、IDirect3Ddevice8::SetTextureStageState メソッドを呼び出して現在のテクスチャ フィルタリング方法を設定する必要がある。第 1 パラメータの値を、テクスチャ フィルタリング方法を選択するテクスチャの整数インデックス番号 (0 〜 7) に設定する。第 2 パラメータとして D3DTEXTUREMAGFILTER、D3DTEXTUREMINFILTER、または D3DTEXTUREMIPFILTER を渡して、拡大、縮小、またはミップマップ フィルタを設定する。第 3 パラメータの値として D3DTEXTUREFILTERTYPE 列挙型のメンバを渡して、拡大、縮小、またはミップマップ フィルタを設定する。
ここでは、Direct3D でサポートするテクスチャ フィルタリング方法について説明する。説明するトピックは、次のとおりである。
注 D3DRENDERSTATETYPE 列挙型にあるテクスチャ フィルタリング ステートは、テクスチャ ステージ ステートに置き換えられているが、このレンダリング ステートを使用しても、IDirect3DDevice2 バージョンとは対照的に IDirect3DDevice8::SetRenderState の実行が失敗することはない。その代わり、システムでは、このレンダリング ステートのエフェクトをマルチ テクスチャ カスケードの最初のステージ (ステージ 0) にマッピングする。アプリケーションでは、従来のレンダリング ステートをそれと対応するテクスチャ ステージ ステートと併用しないこと。予期せぬ結果が生じるおそれがある。