ページ 11

加算ブレンドについて

Posted: 2012年10月02日(火) 22:24
by たつー
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
を使用して加算ブレンドを試みたのですが、画像が光ってくれません。
画像はpng形式です。
何がいけないのでしょうか?

Re: 加算ブレンドについて

Posted: 2012年10月02日(火) 22:26
by softya(ソフト屋)
何に対して加算ブレンドしてのでしょうか?
黒い背景に対して加算ブレンドしても元の色のままとなりますが。

Re: 加算ブレンドについて

Posted: 2012年10月02日(火) 22:40
by たつー
返信ありがとうございます。
新・ゲームプログラミングの館の「素材ファイル付のプロジェクトをこちらからダウンロード」のファイルの中の「キャラクタ01.png」
という画像についてです。

Re: 加算ブレンドについて

Posted: 2012年10月02日(火) 22:45
by softya(ソフト屋)
たつー さんが書きました:返信ありがとうございます。
新・ゲームプログラミングの館の「素材ファイル付のプロジェクトをこちらからダウンロード」のファイルの中の「キャラクタ01.png」
という画像についてです。
あっと言葉が足りませんでしたね。
Aと言う画像とBと言う画像を重ねないと加算半透明の効果は得られません。
なので「何に対して加算ブレンドしているのでしょうか?」と言う質問をしています。
「キャラクタ01.png」がAとして、もう一つのBは何でしょうか?

Re: 加算ブレンドについて

Posted: 2012年10月02日(火) 23:03
by たつー
こちらも言葉足らずだったかもしれません。
DXライブラリを使用しています。
新・ゲームプログラミングの館の2.4 の説明によれば

SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );   //ブレンドモードを加算(255/255)に設定
DrawGraph( 300, 200, Handle, TRUE ); //画像の描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ

とこのような書き方で光る処理ができるとのことです。
Aと言う画像とBと言う画像を重ねないでできると思います。
しかし、なぜか光ってくれません。
初心者なので勘違いがあるかもしれませんが、よろしくお願いします。

Re: 加算ブレンドについて

Posted: 2012年10月02日(火) 23:08
by softya(ソフト屋)
たつー さんが書きました:こちらも言葉足らずだったかもしれません。
DXライブラリを使用しています。
新・ゲームプログラミングの館の2.4 の説明によれば

SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );   //ブレンドモードを加算(255/255)に設定
DrawGraph( 300, 200, Handle, TRUE ); //画像の描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ

とこのような書き方で光る処理ができるとのことです。
Aと言う画像とBと言う画像を重ねないでできると思います。
しかし、なぜか光ってくれません。
初心者なので勘違いがあるかもしれませんが、よろしくお願いします。
それは勘違いです。
あくまで背景があれば、その色に加算合成することで光って見えるが正しいです。
これは明るさを加算するだけなので、背景が黒なら赤を加算合成してもも赤にしかなりません。

嘘だと思うなら、
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );   //ブレンドモードを加算(255/255)に設定
DrawGraph( 300, 200, Handle, TRUE ); //画像の描画
DrawGraph( 300, 200, Handle, TRUE ); //画像の描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ); //ブレンドモードをオフ

として見てください。こうすれば少しは白っぽくはなりませんでしたか?
これはA+Aの加算なのでもっと白く飛ばすには違う画像を下に置くのが効果的です。

【補足】
加算合成とはRGBの各色を加算して合成することです。
1ドットに注目して加算合成を説明すると
A: RGB=(10,20,30)
B: RGB=(30,40,10)
を合成すると RGB=(10+30,20+40,30+10)で
合成: RGB=(40,60,40)
とRGBの各色が加算されて合成されます。
なので、
A: RGB=(0,0,0)
B: RGB=(30,40,10)
を合成すると RGB=(0+30,0+40,0+10)で
合成: RGB=(30,40,10)
と合成結果は元のBのままと言うことになります。

Re: 加算ブレンドについて

Posted: 2012年10月03日(水) 13:45
by たつー
返信ありがとうございます。
softya(ソフト屋)さんの言った通りに描画関数を2つ書くことで画像がちゃんと光り、問題が解決しました。
わかりやすい解説でとても勉強になりました。
ありがとうございました。

Re: 加算ブレンドについて

Posted: 2012年10月03日(水) 13:48
by たつー
解決のチェックボックスにチェックするのを忘れてたので、ここでチェックして書き込みます。