今回は、エフェクトってほどのものではありませんが加算合成をやります 加算合成はすでに書かれている色に対して これから描こうとしている色を 通常は塗りつぶしに対して、 加算合成の場合は色を足します 今回使うファイルは次のようになってます。どぞー(-ω-)つ旦 ・&ref(direct3d.h); ・&ref(direct3d.cpp); ・&ref(texture.h); ・&ref(texture.cpp); ・&ref(sprite.h); ・&ref(sprite.cpp); ・&ref(effect.cpp);(WinMain関数があるアプリケーション本体) 今回使う画像はこちら ・bomb.png &ref(bomb.png); (↑右クリックで画像保存) zipでほしい人はこちら ・&ref(effect.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回 #vote( ふたえのきわみアッー[0],ガトチュゼロスタイル[0],「」[0]);