すみません、またたろうです。
お忙しい所すみません、三つ質問させてください<(_ _)>
@以下のプログラムですが、test.bmpを読み込んで
swtが0の時はMakeScreen(アルファ値不使用)にtest.bmpを貼ったものを描画
swtが1の時はMakeScreen(アルファ値使用)にtest.bmpを貼ったものを描画
swtが2の時はtest.bmpをそのまま描画
というものです。
スペースキーでswtが切り替わる様になっています。
swt0の時と、swt1及びswt2の時の描画結果の色味が変わってしまうのですが
これはそういうものなのでしょうか?
test.bmpは透明部分を持たないもので、カラフルな画像であれば何でもいいのですが、
透明部分がないのであれば結果は同じになるような気がするのですが
どうでしょうか?
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC){
SetGraphMode(1920,1080,16);
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return -1;
SetUsePremulAlphaConvertLoad(1); SetFontCacheUsePremulAlphaFlag(1);
int grp=LoadGraph("test.bmp");
int ms[2];
ms[0]=MakeScreen(1920,1080, 0);
ms[1]=MakeScreen(1920,1080, 1);
SetDrawScreen(ms[0]);DrawExtendGraph(0,0,1920,1080,grp,1);
SetDrawScreen(ms[1]);DrawExtendGraph(0,0,1920,1080,grp,1);
SetDrawScreen(DX_SCREEN_BACK);
int swt=0,t=0;
// メインループ
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // ESCキーで終了処理
ClsDrawScreen();
DrawExtendGraph(0,0,1920,1080,grp,1);
if(t>15&&CheckHitKey(KEY_INPUT_SPACE)){t=0;swt++;if(swt>2)swt=0;}
if(swt<2){DrawGraph(0,0,ms[swt],1);}
DrawFormatString( 0,0,GetColor(255,255,255),"(%d)",swt );
t++;
ScreenFlip();
}
if(ProcessMessage() == -1){ DxLib_End();} // 強制終了時に黒画面が残らないようにする
DxLib_End(); // DXライブラリ終了
return 0;
}
A「MakeScreenのUseAlphaChannelを0にして作った画像に例えば風景画を貼り付けて
その上に加算ブレンド(DX_BLENDMODE_PMA_ADD?)で炎の画像などを貼り付けて、それを裏画面に貼る」と
「裏画面に、そのまま画像を貼って、加算ブレンドで炎の画像などを貼る」場合は
同じ見た目になるでしょうか?
Bちょっと関係ないですが、SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 128 ) ;
とやって半透明で描画をして、それを元に戻したい時は
SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255) ;と
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ) ;と
どちらが正しいでしょうか?それとも同じなんでしょうか
散々使っている上に、関連で色々お聞きしてきたのに、乗算済みやその周辺の理解が
いまだに頭が追い付かずすみません。教えていただけると助かります。
宜しくお願いいたします<(_ _)>