描画ステートとは?
前のページでは後述するとだけ書いて流しましたが、描画ステートは描画に置いてかなり重要なものになっています。
ゲームでエフェクト等の演出を作る為には必ず必要になってきます。
// 初期の描画ステートを設定 void SetDefaultRenderState(void) { IDirect3DDevice9* pDevice = GetDirect3DDevice(); // カリングモード pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); // フィルモード pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); // Zバッファを有効にするか? pDevice->SetRenderState(D3DRS_ZENABLE, true); // Zバッファの書き込みを有効にするか? pDevice->SetRenderState(D3DRS_ZWRITEENABLE, true); // Zバッファの書き込みを有効にするか? pDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS); // αブレンドを有効にするか? pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true); // αテストを有効にするか? pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, true); // αテストの判定方法 pDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NOTEQUAL); // αテストの参照値 pDevice->SetRenderState(D3DRS_ALPHAREF, 0); // 描画設定 pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); // カラーステージ設定 pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT); // αステージ設定 pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT); // テクスチャーフィルターの設定 pDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE); pDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); pDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); // テクスチャーのアドレッシングモードの設定 pDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); pDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); }
DirectX9における描画ステートの設定はSetRenderState関数で行います。
第一引数で何の設定を行うかを指定します。
第二引数で指定された項目の設定を行います。
今回初期設定として設定している項目は以下の通りです。
・ D3DRS_CULLMODE
カリングモードの設定です。
この設定ではポリゴンのどちらの面を描画するかの設定です。
D3DCULL_CCWで背面を左回りでカリングするように設定しています。
他にも右回りでカリングする設定とカリングせずに両面を描画する設定があります。
・D3DRS_FILLMODE
フィルモードの設定です。
ポリゴンを描画する際の塗り方を設定です。
D3DFILL_SOLIDは面を全て塗りつぶす設定です。
他にもワイヤーフレームや点を塗りつぶす設定があります。
・D3DRS_ZENABLE
Zバッファを有効にするかを設定できます。
TRUEかFALSEで設定します。
・D3DRS_ZWRITEENABLE
Zバッファの書き込みを有効にするかを設定できます。
TRUEかFALSEで設定します。
・D3DRS_ALPHABLENDENABLE
αブレンドを有効にするか設定できます。
TRUEかFALSEで設定します。
・D3DRS_ALPHATESTENABLE
αテストを有効にするか設定できます。
TRUEかFALSEで設定します。
・D3DRS_ALPHAFUNC
αテストの判定方法の設定です。
D3DCMP_NOTEQUALは次項のαテストの参照値と!=ならテストに通るようになっています。
他にも比較演算子が一通り用意されています。
・D3DRS_ALPHAREF
αテストの参照値の設定です。
数値で0-255を(0~1.0f)として判定されます。
今回は0なので透明な箇所は描画されないようになっています。
・D3DRS_SRCBLEND
出力するカラーのブレンド方法を指定できます。
D3DBLEND_SRCALPHAは出力α値を掛け合わせるようにしています。
式:SrcColor * α
・D3DRS_DESTBLEND
書き込み先のカラーに対するブレンド方法を指定できます。
D3DBLEND_INVSRCALPHAは1 – 出力αの値を掛け合わせるようにしていしています。
式:DestColor * (1 – α)
次にテクスチャ―ステージの設定をSetTextureStageStateで行っています。
テクスチャ―ステージの設定とは設定したテクスチャーをどのように合成するかの設定です。
第一引数の数値はテクスチャーを設定する際に指定するステージの番号です。
・D3DTSS_COLOROP
テクスチャ―のカラーステージの合成方法を指定できます。
D3DTOP_MODULATEは乗算を意味しています。
次に出てくるD3DTSS_COLORARG1とD3DTSS_COLORARG2に対して処理されます。
・D3DTSS_COLORARG1
カラーの一つ目の引数です。
D3DTA_TEXTUREではテクスチャーのカラーが該当します。
。D3DTSS_COLORARG2
カラーの二つ目の引数です。
D3DTA_CURRENTは1つ前のステージの値を意味しています。
0ステージ目に設定された場合はD3DTA_DIFFUSEと同じ意味となり頂点カラーの値が使用されます。
頂点カラーが無い場合は白(0xFFFFFFFF)として扱われます。
・D3DTSS_ALPHAOP
・D3DTSS_ALPHAARG1
・D3DTSS_ALPHAARG2
こちらの3項目はαステージの設定です。
内容としては基本的にカラーステージと同じになります。
最後にテクスチャーのサンプラーステートを設定しています。
こちらは3Dでミップマップ辺りを使う時に説明しようかと思うので今回は割愛させてもらいます。