サンプラステートは、テクスチャの色を読み取る(サンプリング)時の、フィルタリングなどを設定します。サンプラステージは、16個あります(ただし、ピクセルシェーダ1.0〜1.3では、4つ、1.4では6つしか使用できません)。ピクセルシェーダのサンプリングステージレジスタの番号やSetTextureで設定したテクスチャ番号と一対一に対応します。むしろ、サンプリングステージレジスタで読み込む設定をする関数と考えるほうがよいかもしれません。サンプラステートを間違えたところ表示されないことはほとんどありませんが、見た目の綺麗さに大きく影響するので、いじる価値はあります。
値を設定する時は、IDirect3DDevice9::SetSamplerState(ステージ番号, 設定項目, 設定値)で、設定します。
サンプラステート |
機能 |
D3DSAMP_ADDRESSU |
u 座標でのテクスチャ アドレッシング方法 |
D3DSAMP_ADDRESSV |
v 座標でのテクスチャ アドレッシング方法 |
D3DSAMP_ADDRESSW |
w 座標でのテクスチャ アドレッシング方法 |
D3DSAMP_BORDERCOLOR |
境界色 |
D3DSAMP_MAGFILTER |
テクスチャ拡大フィルタ |
D3DSAMP_MINFILTER |
テクスチャ縮小フィルタ |
D3DSAMP_MIPFILTER |
ミップマップ レベル間で使用するテクスチャフィルタ |
D3DSAMP_MIPMAPLODBIAS |
ミップマップに対する詳細バイアスのレベル |
D3DSAMP_MAXMIPLEVEL |
最大ミップマップ詳細レベル |
D3DSAMP_MAXANISOTROPY |
異方性レベルの最大値 |
D3DSAMP_SRGBTEXTURE |
ガンマ補正の値 |
D3DSAMP_ELEMENTINDEX |
マルチテクスチャの使用要素 |
D3DSAMP_DMAPOFFSET |
ディスプレイスメントマップで使う頂点オフセット |
u 座標でのテクスチャ アドレッシング方法を選択します。設定される値は、D3DTEXTUREADDRESS 列挙型のメンバです。
D3DTEXTUREADDRESS 列挙型には、次の種類があります。
▼ D3DTADDRESS_WRAP整数区切りごとにテクスチャを繰り返します。たとえば、u の値が 0 から 3 までの場合、テクスチャが 3 回繰り返されます。このとき、ミラーリングは行われません。 |
|
▼ D3DTADDRESS_MIRRORD3DTADDRESS_WRAP と似ていますが、テクスチャは整数区切りごとに反転されます。たとえば、u の値が 0 から 1 までの場合、テクスチャの処理が通常どおりに行われますが、1 から 2 までの場合は反転表示 (ミラー化) され、2 から 3 までの場合は再び通常の処理が行われます。これ以降も、このパターンで処理されます。 |
|
▼ D3DTADDRESS_CLAMP範囲 [0.0, 1.0] の外にあるテクスチャ座標には、それぞれ 0.0 と 1.0 のテクスチャ カラーが設定されます。 |
|
▼ D3DTADDRESS_BORDERD3DTADDRESS_BORDER 範囲 [0.0, 1.0] の外にあるテクスチャ座標には、境界色が設定されます。 |
|
▼ D3DTADDRESS_MIRRORONCED3DTADDRESS_MIRRORやD3DTADDRESS_CLAMPと似ています。テクスチャ座標の絶対値をとって(この結果0を軸に反転します)、最大値の色で最外周が塗られます。この繰り返し法の使い道の1つはボリュームテクスチャです。軸に対称なオブジェクトが簡単に作れます。 |
v 座標でのテクスチャ アドレッシング方法を選択します。設定する値は、D3DTEXTUREADDRESS 列挙型のメンバです。
w 座標でのテクスチャ アドレッシング方法を選択します。設定する値は、D3DTEXTUREADDRESS 列挙型のメンバです。
D3DTADDRESS_BORDERを指定したときに、テクスチャ座標が0や1からはみ出した時の色を設定します。D3DCOLORで設定します。
テクスチャをプリミティブにレンダリングするときに使用するテクスチャ拡大フィルタを示します。設定する型は、 D3DTEXTUREFILTERTYPE 列挙型のメンバです。
ミップマップ処理を無効にします。ラスタライザは拡大フィルタのみを使用します。
点フィルタを、テクスチャ拡大または縮小のフィルタとして使用します。要求されたピクセル値に最も近い座標を持つテクセルを使用します。ミップマップ レベル間で使われるテクスチャフィルタは、最近点ミップマップフィルタリングです。ラスタライザは最も近いミップマップテクスチャのテクセルの色を使用します。
双線形補間フィルタリングを、テクスチャ拡大または縮小のフィルタとして使用します。要求されたピクセル近傍の 2 × 2 領域に含まれるテクセルの重み付き平均を使用します。
ミップマップレベル間で使われるテクスチャフィルタは、トライリニアミップマップ補間です。ラスタライザは、最も近いミップマップ テクスチャ 2 点のテクセルを線形補間してピクセルの色を計算します。
D3DTEXF_ANISOTROPIC 異方性テクスチャ フィルタをテクスチャ拡大または縮小のフィルタとして使用します。テクスチャポリゴンとスクリーン平面間の角度の相違で発生するひずみを補正します。
テクスチャをプリミティブにレンダリングするときに使用するテクスチャ縮小フィルタを設定します。値は D3DTEXTUREFILTERTYPE 列挙型のメンバです。
ミップマップ レベル間で使用するテクスチャフィルタを示す D3DTEXTUREFILTERTYPE 列挙型のメンバです。
ミップマップに対する詳細バイアスのレベルです。
アプリケーションで許容する最大ミップマップ詳細レベルです。ミップマップ チェーンの先頭を始点とするインデックスとして表現されます。この値が低いほど、ミップマップ チェーンのより高いレベルの詳細さを示します。0 がデフォルト値で、全レベルが使用可能であることを示します。0 以外の値は、指定されたインデックスよりも高い詳細レベルのミップマップを表示できないことを示します。
異方性レベルの最大値です。
ガンマ補正の値です。デフォルトの値は0です。この意味は、ガンマの値が1.0で、補正されないということです。また、この補正値の意味するところは、Windows標準のsRGBである2.2のガンマ値を線形(ガンマ1.0)に変換して、ピクセルシェーダに色を受け渡し、最終的な表示で、sRGBに変換する操作を行います。
マルチテクスチャを使った時に、テクスチャのどの要素を使うのかインデックスで指定します。初期値は0です。
ディスプレイスメントマップで使う頂点オフセットです。このステートは、テッセレータに使われる定数で、値は256です。