今回は、エフェクトってほどのものではありませんが加算合成をやります

加算合成はすでに書かれている色に対して
これから描こうとしている色を
通常は塗りつぶしに対して、
加算合成の場合は色を足します

今回使うファイルは次のようになってます。どぞー(-ω-)つ旦
filedirect3d.h
filedirect3d.cpp
filetexture.h
filetexture.cpp
filesprite.h
filesprite.cpp
fileeffect.cpp(WinMain関数があるアプリケーション本体)
今回使う画像はこちら
・bomb.png
bomb.png
(↑右クリックで画像保存)

zipでほしい人はこちら
fileeffect.zip

爆発などの表現に使われます
というのは
コンピュータ上での色は
0x00000000は真っ黒に対して、0xffffffffは真っ白になります
つまり色を足すことで白に近づきます
あまり足しすぎると真っ白になるので注意しましょう

#pragma once

// Direct3Dクラスは同じなので略

// レンダーステートの設定
enum RENDERSTATE
{
	RENDER_DEFAULT,		// デフォルト(不透明)
	RENDER_ALPHATEST,	// αテスト
	RENDER_HALFADD,		// 半加算合成
	RENDER_ADD			// 加算合成
};

// レンダーステートの変更
void SetRenderState(IDirect3DDevice9* pD3DDevice,RENDERSTATE RenderState);

direct3d.cppは次のように

#include "direct3d.h"

// Direct3Dクラスのメンバ関数は同じなので略

// レンダーステートの変更
void SetRenderState(IDirect3DDevice9* pD3DDevice,RENDERSTATE RenderState)
{
	switch(RenderState)
	{
	case RENDER_DEFAULT:
		{
			// 不透明オブジェクト
			pD3DDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);		//アルファテストの無効化
			pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);		//アルファブレンディングの無効化
		}
		break;
	case RENDER_ALPHATEST:
		{
			// αテストによる透明領域の切り抜き
			pD3DDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);			//アルファテストの有効化
			pD3DDevice->SetRenderState(D3DRS_ALPHAREF, 0x80);					//アルファ参照値
			pD3DDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);	//アルファテスト合格基準
			
			pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);			//アルファブレンディングの無効化
		}
		break;
	case RENDER_HALFADD:
		{
			// 半加算合成
			pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);			//アルファブレンディングの有効化
			pD3DDevice->SetRenderState(D3DRS_BLENDOP,  D3DBLENDOP_ADD );		//ブレンディングオプション加算
			pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);			//SRCの設定
			pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);	//DESTの設定

			pD3DDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);			//アルファテストの無効化
		}
		break;
	case RENDER_ADD:
		{
			// 全加算合成
			pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);		//アルファブレンディングの有効化
			pD3DDevice->SetRenderState(D3DRS_BLENDOP,  D3DBLENDOP_ADD );	//ブレンディングオプション加算
			pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);		//SRCの設定
			pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);		//DESTの設定

			pD3DDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);		//アルファテストの無効化
		}
		break;
	}
}

前:DirectX講座18回
次:DirectX講座20回

選択肢 投票
ふたえのきわみアッー 0  
ガトチュゼロスタイル 0  
「」 0  

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS