暗闇の中での光源が複数ある場合

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 暗闇の中での光源が複数ある場合

Re: 暗闇の中での光源が複数ある場合

#3

by hashBrown » 6年前

ISLe 様

ありがとうございます!

色んなブレンドを組み合わせてみたり、マスクを使ってみたりとずっと悩んでいたのですが、解決しました!

MakeScreenを使えば複数の画像をブレンドして、それでできたグラフィックを一枚の画像として描画することができるのですね。

Re: 暗闇の中での光源が複数ある場合

#2

by ISLe » 6年前

これでいかがでしょう。

コード:

//背景画像(640×480)
int test = LoadGraph("test.png");
//背景と同じサイズで、白から黒に円形でグラデーションしている画像
int mul = LoadGraph("mul.png");
// グラデーション画像の合成用スクリーン
int handle = MakeScreen(640, 480, FALSE);


// グラデーション画像をオフスクリーンで合成
SetDrawScreen(handle); // 合成用オフスクリーンを描画対象に
ClearDrawScreen();
SetDrawBlendMode(DX_BLENDMODE_ADD, 255);
DrawGraph(0, 0, mul, TRUE);
DrawGraph(320, 0, mul, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

SetDrawScreen(DX_SCREEN_BACK); // 表示用スクリーンを描画対象に
DrawGraph(0, 0, test, TRUE);
// 合成したグラデーション画像を表示用スクリーンに乗算
SetDrawBlendMode(DX_BLENDMODE_MUL, 255);
DrawGraph(0, 0, handle, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

暗闇の中での光源が複数ある場合

#1

by hashBrown » 6年前

洞窟の中での光を表すときに、光源が一つだけならば乗算ブレンドを使ってうまく表現をすることができました。

コード:

//背景画像(640×480)
int test = LoadGraph("test.png");
//背景と同じサイズで、白から黒に円形でグラデーションしている画像
int mul = LoadGraph("mul.png");

DrawGraph(0, 0, test, TRUE);

SetDrawBlendMode(DX_BLENDMODE_MUL, 255);
DrawGraph(0, 0, mul, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
しかし、例えば光源が二つあってその光同士が重なり合う場合、この方法では思い通りの結果を得られませんでした
[code = Cpp]
//背景画像(640×480)
int test = LoadGraph("test.png");
//背景と同じサイズで、白から黒に円形でグラデーションしている画像
int mul = LoadGraph("mul.png");

DrawGraph(0, 0, test, TRUE);

SetDrawBlendMode(DX_BLENDMODE_MUL, 255);
DrawGraph(0, 0, mul, TRUE);
DrawGraph(320, 0, mul, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
[/code]

光源が複数あって、それらが重なり合う場合はどうすればうまくいくでしょうか?

ページトップ