F)     サンプラステート

 

サンプラステートは、テクスチャの色を読み取る(サンプリング)時の、フィルタリングなどを設定します。サンプラステージは、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

ディスプレイスメントマップで使う頂点オフセット

 

D3DSAMP_ADDRESSU

u 座標でのテクスチャ アドレッシング方法を選択します。設定される値は、D3DTEXTUREADDRESS 列挙型のメンバです。

D3DTEXTUREADDRESS 列挙型には、次の種類があります。

      D3DTADDRESS_WRAP

整数区切りごとにテクスチャを繰り返します。たとえば、u の値が 0 から 3 までの場合、テクスチャが 3 回繰り返されます。このとき、ミラーリングは行われません。

      D3DTADDRESS_MIRROR

D3DTADDRESS_WRAP と似ていますが、テクスチャは整数区切りごとに反転されます。たとえば、u の値が 0 から 1 までの場合、テクスチャの処理が通常どおりに行われますが、1 から 2 までの場合は反転表示 (ミラー化) され、2 から 3 までの場合は再び通常の処理が行われます。これ以降も、このパターンで処理されます。

      D3DTADDRESS_CLAMP

範囲 [0.0, 1.0] の外にあるテクスチャ座標には、それぞれ 0.0 と 1.0 のテクスチャ カラーが設定されます。

      D3DTADDRESS_BORDER

D3DTADDRESS_BORDER 範囲 [0.0, 1.0] の外にあるテクスチャ座標には、境界色が設定されます。

      D3DTADDRESS_MIRRORONCE

D3DTADDRESS_MIRRORやD3DTADDRESS_CLAMPと似ています。テクスチャ座標の絶対値をとって(この結果0を軸に反転します)、最大値の色で最外周が塗られます。この繰り返し法の使い道の1つはボリュームテクスチャです。軸に対称なオブジェクトが簡単に作れます。

 

D3DSAMP_ADDRESSV

v 座標でのテクスチャ アドレッシング方法を選択します。設定する値は、D3DTEXTUREADDRESS 列挙型のメンバです。

 

D3DSAMP_ADDRESSW

w 座標でのテクスチャ アドレッシング方法を選択します。設定する値は、D3DTEXTUREADDRESS 列挙型のメンバです。

 

D3DSAMP_BORDERCOLOR

D3DTADDRESS_BORDERを指定したときに、テクスチャ座標が0や1からはみ出した時の色を設定します。D3DCOLORで設定します。

 

D3DSAMP_MAGFILTER

テクスチャをプリミティブにレンダリングするときに使用するテクスチャ拡大フィルタを示します。設定する型は、 D3DTEXTUREFILTERTYPE 列挙型のメンバです。

      D3DTEXF_NONE

ミップマップ処理を無効にします。ラスタライザは拡大フィルタのみを使用します。

      D3DTEXF_POINT

点フィルタを、テクスチャ拡大または縮小のフィルタとして使用します。要求されたピクセル値に最も近い座標を持つテクセルを使用します。ミップマップ レベル間で使われるテクスチャフィルタは、最近点ミップマップフィルタリングです。ラスタライザは最も近いミップマップテクスチャのテクセルの色を使用します。

      D3DTEXF_LINEAR

双線形補間フィルタリングを、テクスチャ拡大または縮小のフィルタとして使用します。要求されたピクセル近傍の 2 × 2 領域に含まれるテクセルの重み付き平均を使用します。

ミップマップレベル間で使われるテクスチャフィルタは、トライリニアミップマップ補間です。ラスタライザは、最も近いミップマップ テクスチャ 2 点のテクセルを線形補間してピクセルの色を計算します。

      D3DTEXF_ANISOTROPIC

D3DTEXF_ANISOTROPIC 異方性テクスチャ フィルタをテクスチャ拡大または縮小のフィルタとして使用します。テクスチャポリゴンとスクリーン平面間の角度の相違で発生するひずみを補正します。

 

D3DSAMP_MINFILTER

テクスチャをプリミティブにレンダリングするときに使用するテクスチャ縮小フィルタを設定します。値は D3DTEXTUREFILTERTYPE 列挙型のメンバです。

 

D3DSAMP_MIPFILTER

ミップマップ レベル間で使用するテクスチャフィルタを示す D3DTEXTUREFILTERTYPE 列挙型のメンバです。

 

D3DSAMP_MIPMAPLODBIAS

ミップマップに対する詳細バイアスのレベルです。

 

D3DSAMP_MAXMIPLEVEL

アプリケーションで許容する最大ミップマップ詳細レベルです。ミップマップ チェーンの先頭を始点とするインデックスとして表現されます。この値が低いほど、ミップマップ チェーンのより高いレベルの詳細さを示します。0 がデフォルト値で、全レベルが使用可能であることを示します。0 以外の値は、指定されたインデックスよりも高い詳細レベルのミップマップを表示できないことを示します。

 

D3DSAMP_MAXANISOTROPY

異方性レベルの最大値です。

 

D3DSAMP_SRGBTEXTURE

ガンマ補正の値です。デフォルトの値は0です。この意味は、ガンマの値が1.0で、補正されないということです。また、この補正値の意味するところは、Windows標準のsRGBである2.2のガンマ値を線形(ガンマ1.0)に変換して、ピクセルシェーダに色を受け渡し、最終的な表示で、sRGBに変換する操作を行います。

 

D3DSAMP_ELEMENTINDEX

マルチテクスチャを使った時に、テクスチャのどの要素を使うのかインデックスで指定します。初期値は0です。

 

D3DSAMP_DMAPOFFSET

ディスプレイスメントマップで使う頂点オフセットです。このステートは、テッセレータに使われる定数で、値は256です。