DirectX再入門4

テクスチャラッピングモード

テクスチャの切り出しのUV座標を大きめにとった場合の処理方法を指定する。
ID3DDevice::SetSampleState(index, type, value)
typeにD3DSAMP_ADDRESSUまたはD3DSAMP_ADDRESSVを指定して、
valueに以下の値を指定する。

  • D3DTADDRESS_WRAP :テクスチャを繰り返す
  • D3DTADDRESS_MIRROR:テクスチャとその鏡像を繰り返す
  • D3DTADDRESS_CLAMP :テクスチャの外周の色で塗りつぶす
  • D3DTADDRESS_BORDER:指定の色で塗りつぶす

IDirect3DDevice9::SetTextureStageState(Stage, Type, Value)

現在割り当てられているテクスチャにステート値を設定する。
@param Type D3DTEXTURESTAGESTATETYPE列挙型

D3DTEXTURESTAGESTATETYPE列挙型

D3DTSS_COLOROP
テクスチャステージステートはテクスチャカラーブレンディング処理であり、D3DTEXTUREOP列挙型のメンバにより識別される。

⇒ようは、これを指定したら、
Valueは「D3DTEXTUREOP列挙型」の中から指定してください、
ということみたいです。
ということで、D3DTEXTUREOP列挙型の主要なものをピックアップ。
入力テクスチャ1を入力1、入力テクスチャ2を入力2とする。

  • D3DTOP_SELECTARG1:入力1をそのまま出力する
  • D3DTOP_SELECTARG2:入力2をそのまま出力する
  • D3DTOP_MODULATE :入力1と入力2を乗算する
  • D3DTOP_MODULATE2X:入力1と入力2を乗算して2倍する(D3DTOP_MODULATEで暗いときにはこっち)
  • D3DTOP_ADD    :入力1と入力2を加算する(ライトや爆発に使えるぞ)
  • D3DTOP_SUBTRACT :入力1から入力2を引く
  • D3DTOP_DISABLE  :何も出力しない
D3DTSS_COLORARG1/D3DTSS_COLORARG2
Valueを「D3DTA列挙型」から指定する。

ということで、D3DTA列挙型の主要なものをピックアップ。

  • D3DTA_TEXTURE:テクスチャ引数は、このテクスチャステージのテクスチャカラーとなる
  • D3DTA_DIFFUSE:テクスチャ引数は、ディフューズ色となる

テクスチャフィルタ

テクスチャの拡大縮小時にギザギザを目立たなくする方法。
IDirect3DDevice9::SetTextureStageStateの、

  • TypeにD3DSAMP_MINFILTER/D3DSAMP_MAGFILTER(拡大/縮小時)
  • ValueにD3DTEXTUREFILTERTYPE列挙型を指定する
    • D3DTEXF_POINT    :フィルタをかけない。高速描画できる
    • D3DTEXF_LINEAR    :リニアフィルタ(線形補完)
    • D3DTEXF_ANISOTROPIC :異方性フィルタ。地表面などの、拡大縮小率が手前と奥で異なる場合に使う
    • D3DTEXF_PYRAMIDALQUAD:テントフィルタ。リニアフィルタとあまり変わんないらしい
    • D3DTEXF_GAUSSIANQUAD :ガウシアンフィルタ。またの名をぼかしフィルタ

を指定する。

テクスチャ読み込み2(フィルタをかけて読み込む)

D3DXCreateTextureFromFileEx(
 IDirect3DDevice,
 filename,
 0, 0, 0, 0,
 D3DFMT_A8R8G8B8,
 D3DPOOL_MANAGED,
 D3DX_FILTER_LINEAR, // フィルタ
 D3DX_FILTER_LINEAR, // ミップフィルタ
 D3DCOLOR_XRGB(0, 0, 0), // カラーキー
 NULL, NULL,
 LPDIRECT3DCUBETEXTURE9 *)
ファイルを元にしてキューブテクスチャを作成する。
 
カラーキーを有効にするには、以下のレンダーステートの設定が必要。
(ブレンディングモードの設定。
ブレンディングモードとは、テクスチャステージが出力したアルファ値を、
レンダリングターゲットにどのように反映するかを指定するための設定)

  1. IDirect3DDevice9::SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE)
  2. IDirect3DDevice9::SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
  3. IDirect3DDevice9::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)

1でアルファブレンドを有効化。
2で…、よく分からないのでヘルプのコピペ(´Д`;

D3DBLEND_SRCCOLOR
ブレンディング係数は、(Rs,Gs,Bs,As)。
D3DBLEND_INVSRCCOLOR
ブレンディング係数は、(1 - Rs, 1 - Gs, 1 - Bs, 1 - As)。