アルファブレンドという言葉を聞いたことがあるでしょうか。
画像には光の三原色であるRGB(赤緑青)の他にα(透過度)が存在することを別の章でお話ししました。
プログラムで画像を表示する時、α(透過度)を画像全体に使ってブレンドすることをアルファブレンドと言います。
αは透過度を表すわけですから、アルファブレンドを使う事で「透ける」を表現出来ます。
処理の流れとしては
・描画方法をアルファブレンドに設定する
↓
・画像Aを描画する
↓
・描画方法を元に戻す
の順番です。すると画像Aは設定したアルファブレンドで描画されます。
ブレンドモードを設定する関数は SetDrawBlendMode関数 です。SetDrawBlendMode関数 のリファレンスを確認 してみましょう。
宣言 | int SetDrawBlendMode( int BlendMode , int Pal ) ; |
概略 | 描画の際のブレンドモードをセットする |
引数 | BlendMode : 描画ブレンドモードを指定する引数です DX_BLENDMODE_NOBLEND : ノーブレンド(デフォルト) DX_BLENDMODE_ALPHA : αブレンド Pal : 描画ブレンドモードのパラメータ(0~255) |
(今回必要ない引数の説明を一部省略してあります)
この関数はアルファブレンド以外のブレンドモードにも設定出来ますが、他のモードは次の章で紹介します。
まず、ブレンドモードをアルファブレンドに設定するには第一引数に DX_BLENDMODE_ALPHA を指定します。
第二引数には 0~255 の範囲で透過度を指定します。0で完全透過(見えない)、255で完全不透過(今までの描画と同じ。全く透けない)です。
本章のサンプルプログラムでは、前章のコードを使って、画像を重ねるとどのように透けて見えるのか確認してみます。
#include "DxLib.h" #define PI 3.141592654 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定 int x = 100; int Handle; // 画像格納用ハンドル Handle = LoadGraph( "画像/キャラクタ00.png" ); // 画像のロード // while(裏画面を表画面に反映, メッセージ処理, 画面クリア) while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ DrawRotaGraph( 400, 200, 2.0, PI/4, Handle, TRUE ); //画像の描画 SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128 ); //ブレンドモードをα(128/255)に設定 DrawRotaGraph( x, 200, 1.0, 0.0, Handle, TRUE ); //画像の描画 SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ x++; // xを1増やす } DxLib_End(); // DXライブラリ終了処理 return 0; }
- Remical Soft -