前章がアルファブレンドだったのに対し、本章は加算ブレンドを紹介します。
「光」は重なるほど明るく、白くなりますよね。光の3原色は全て足すと白になります。逆に光が全くないと真っ暗(黒)になるわけです。
つまり光を足し合わせる「加算ブレンド」は合成後、より光った状態になるので、重ねるほど光が強くなり
「光る表現」が可能になるのです。当サイトで配布している四聖龍神録Plusという弾幕シューティングゲームにも加算ブレンドはたびたび使われています。
これは一本の虹色の光る棒があるように見えますが、
実はこの別々の弾を一つずつ加算ブレンドをしてつなげているだけなのです。
アルファブレンドが「透ける」表現だったのに対し、加算ブレンドは「光る」表現であること、分かって頂けましたか?
まだプログラムを見ていないので良く分からないですよね。では
上でも使っているこの弾をアルファブレンドでつなげた時と加算ブレンドでつなげた時の違いをサンプルプログラムで見てみましょう。
(上の画像は分かりやすいように背景を黒で塗っています)
ブレンドモードを加算ブレンドに設定する関数は先ほどと同じ SetDrawBlendMode関数 です。
確認したい人はもう一度 SetDrawBlendMode関数 のリファレンスを確認 して下さい。
宣言 | int SetDrawBlendMode( int BlendMode , int Pal ) ; |
概略 | 描画の際のブレンドモードをセットする |
引数 | BlendMode : 描画ブレンドモードを指定する引数です DX_BLENDMODE_NOBLEND : ノーブレンド(デフォルト) DX_BLENDMODE_ADD : 加算ブレンド Pal : 描画ブレンドモードのパラメータ(0~255) |
(今回必要ない引数の説明を一部省略してあります)
第一引数に DX_BLENDMODE_ADD を指定することで加算ブレンドモードになります。
第二引数には 0~255 の範囲で加算度合いを指定します。0で不加算(全く加算しない)、255で全加算(全て加算する)です。
#include "DxLib.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定 int Handle; // 画像格納用ハンドル Handle = LoadGraph( "画像/弾00.png" ); // 画像のロード // while(裏画面を表画面に反映, メッセージ処理, 画面クリア) while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128 ); //ブレンドモードをα(128/255)に設定 DrawGraph( 100, 200, Handle, TRUE ); //画像の描画 DrawGraph( 120, 200, Handle, TRUE ); //画像の描画 DrawGraph( 140, 200, Handle, TRUE ); //画像の描画 DrawGraph( 160, 200, Handle, TRUE ); //画像の描画 DrawGraph( 180, 200, Handle, TRUE ); //画像の描画 DrawGraph( 200, 200, Handle, TRUE ); //画像の描画 SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ SetDrawBlendMode( DX_BLENDMODE_ADD, 255 ); //ブレンドモードを加算(255/255)に設定 DrawGraph( 300, 200, Handle, TRUE ); //画像の描画 DrawGraph( 320, 200, Handle, TRUE ); //画像の描画 DrawGraph( 340, 200, Handle, TRUE ); //画像の描画 DrawGraph( 360, 200, Handle, TRUE ); //画像の描画 DrawGraph( 380, 200, Handle, TRUE ); //画像の描画 DrawGraph( 400, 200, Handle, TRUE ); //画像の描画 SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ } DxLib_End(); // DXライブラリ終了処理 return 0; }
- Remical Soft -