トップページ > 記事閲覧
RGBAすべてのチャンネルを加算する描画
名前:初期状態 日時: 2016/10/05 16:08

何度もお世話になっております。 DX_BLENDMODE_SRCCLORを使えば描画先のRGBAをすべて上書きできますが、 RGBAすべての要素を加算して描画することはできますか? 回答よろしくお願いします
メンテ

Page: 1 |

Re: RGBAすべてのチャンネルを加算する描画 ( No.1 )
名前:管理人 日時:2016/10/06 23:38

> DX_BLENDMODE_SRCCLORを使えば描画先のRGBAをすべて上書きできますが、 > RGBAすべての要素を加算して描画することはできますか? SetDrawBlendMode( DX_BLENDMODE_ADD, 255 ) ; と設定すればRGBAすべての要素を加算する描画になります よろしければお試しください
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.2 )
名前:初期状態(解決) 日時:2016/10/11 22:42

それだとA値が小さい場合にRGBの影響量が弱まってしまうのでは、、 と危惧していましたがそんなことはありませんでした。 ありがとうございました
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.3 )
名前:管理人 日時:2016/10/12 00:56

> それだとA値が小さい場合にRGBの影響量が弱まってしまうのでは、、 すみません、仰る通りです なので RGBA をそのまま足し算するブレンドモードを追加しようと思いますが、 既存の DX_BLENDMODE_ADD で問題が無いご様子…? もし DX_BLENDMODE_ADD を使用した描画結果が初期状態さんの望まれるものでしたら RGBA をそのまま足し算するブレンドモードの追加は止めようと思うのですが、 DX_BLENDMODE_ADD を使用した描画結果は本当に初期状態さんの望まれるものでしょうか?
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.4 )
名前:初期状態 日時:2016/10/23 02:01

実は、私のプロジェクトではA値まで含めて加算描画をする必要がなくなってしまい、 しっかりとした検証を行わないまま解決としてしまっておりました。 私が検証したときは描画関数の透過フラグを0にしており、 また、RGBの影響量が減衰するか否かのみを見ていたため、 A値がちゃんと足されていないことに気が付いていなかったようです 私にとってその機能は今のところ必要はありませんが、 後々必要となったり、ほかの開発者の方が必要としていたりする可能性は捨てきれないと思います。 ライブラリの汎化を考えると、乗算以下の合成モードにも A値をRGB同様に演算するだけの描画モード(あるいは設定フラグ)を設けるべきかと思うのですが、いかがでしょう? 全く急ぎではないのでほかの作業を優先していただいて構わないです。 おこがましい提案で申し訳ないですが。。。
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.5 )
名前:管理人 日時:2016/10/24 01:38

ご返答ありがとうございます もしかしたら使う方が居るかもしれない、というくらいの需要の機能を追加してしまうと どんどんライブラリが肥大化してしまうので、その機能を必要とする方からご要望を 頂いた際に追加しようと思います (・・;
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.6 )
名前:へけぽん 日時:2016/10/24 21:34

A値加算ではなく減算するブレンドモードがあると 特定の形に切り抜いたり、また穴をあけたりする演出が簡単になるので欲しいです
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.7 )
名前:管理人 日時:2016/10/25 01:47

現状の減算ブレンド( DX_BLENDMODE_SUB )でもA値減算をすることができますので、 よろしければお使いください m(_ _)m // アルファチャンネルつきの描画可能画像を黄色で塗りつぶした後 // 画像の中心を円形にくりぬいたものを描画するサンプルプログラム #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int screen ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // アルファチャンネルつきの描画対象にできるグラフィックハンドルを作成 screen = MakeScreen( 640, 480, TRUE ) ; // メインループ while( ProcessMessage() == 0 ) { // 描画対象にできるグラフィックハンドルを描画対象に設定 SetDrawScreen( screen ) ; // 描画対象にできるグラフィックハンドルをクリア ClearDrawScreen() ; // 描画対象にできるグラフィックハンドル全体を黄色の四角形で塗りつぶす SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) ; DrawBox( 0, 0, 640, 480, GetColor( 255,255,0 ), TRUE ) ; // 描画対象にできるグラフィックハンドルの中心を減算ブレンドで円形にくりぬく SetDrawBlendMode( DX_BLENDMODE_SUB, 255 ) ; DrawCircle( 320, 240, 128, GetColor( 255,255,255 ), TRUE ) ; // 描画対象を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 裏画面をクリア ClearDrawScreen() ; // 裏画面全体を灰色の四角形で塗りつぶす SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) ; DrawBox( 0, 0, 640, 480, GetColor( 128,128,128 ), TRUE ) ; // 裏画面に描画対象にできるグラフィックハンドルを描画する DrawGraph( 0, 0, screen, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: RGBAすべてのチャンネルを加算する描画 ( No.8 )
名前:へけぽん 日時:2016/10/25 11:59

減算ブレンドでα値も減算されるんですね 知らずに失礼いたしましたm(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存