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 *)
ファイルを元にしてキューブテクスチャを作成する。
カラーキーを有効にするには、以下のレンダーステートの設定が必要。
(ブレンディングモードの設定。
ブレンディングモードとは、テクスチャステージが出力したアルファ値を、
レンダリングターゲットにどのように反映するかを指定するための設定)
- IDirect3DDevice9::SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE)
- IDirect3DDevice9::SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
- IDirect3DDevice9::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)
1でアルファブレンドを有効化。
2で…、よく分からないのでヘルプのコピペ(´Д`;
- D3DBLEND_SRCCOLOR
- ブレンディング係数は、(Rs,Gs,Bs,As)。
- D3DBLEND_INVSRCCOLOR
- ブレンディング係数は、(1 - Rs, 1 - Gs, 1 - Bs, 1 - As)。