テクスチャーを使った描画

描画ステートとは?

前のページでは後述するとだけ書いて流しましたが、描画ステートは描画に置いてかなり重要なものになっています。
ゲームでエフェクト等の演出を作る為には必ず必要になってきます。

// 初期の描画ステートを設定
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でミップマップ辺りを使う時に説明しようかと思うので今回は割愛させてもらいます。

1 2 3 4

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です