加算ブレンドについて

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

加算ブレンドについて

#1

投稿記事 by たつー » 13年前

SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
を使用して加算ブレンドを試みたのですが、画像が光ってくれません。
画像はpng形式です。
何がいけないのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 13年前

何に対して加算ブレンドしてのでしょうか?
黒い背景に対して加算ブレンドしても元の色のままとなりますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たつー

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

#3

投稿記事 by たつー » 13年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 13年前

たつー さんが書きました:返信ありがとうございます。
新・ゲームプログラミングの館の「素材ファイル付のプロジェクトをこちらからダウンロード」のファイルの中の「キャラクタ01.png」
という画像についてです。
あっと言葉が足りませんでしたね。
Aと言う画像とBと言う画像を重ねないと加算半透明の効果は得られません。
なので「何に対して加算ブレンドしているのでしょうか?」と言う質問をしています。
「キャラクタ01.png」がAとして、もう一つのBは何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たつー

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

#5

投稿記事 by たつー » 13年前

こちらも言葉足らずだったかもしれません。
DXライブラリを使用しています。
新・ゲームプログラミングの館の2.4 の説明によれば

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 13年前

たつー さんが書きました:こちらも言葉足らずだったかもしれません。
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のままと言うことになります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たつー

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

#7

投稿記事 by たつー » 13年前

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

たつー

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

#8

投稿記事 by たつー » 13年前

解決のチェックボックスにチェックするのを忘れてたので、ここでチェックして書き込みます。

閉鎖

“C言語何でも質問掲示板” へ戻る