トップページ > 過去ログ > 記事閲覧
SetDrawBlendMode()について
名前:Sura 日時: 2008/12/15 14:19

お世話になります。 DXライブラリ Ver2.25bで、 SetDrawBlendMode()を用いて DrawBox()で四角形を描画するときに ブレンドモードが無視される現象を確認しました。 この現象は、 SetDrawScreen()で裏画面にセットした後、 背景画像を描画した後 ブレンドモードを指定して DrawBox()を試みるときに発生するというものです。 以下にサンプルコードを示します。 お忙しいところ恐縮ですが ご検討願います。 //サンプルコード #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 描画先画面を裏にする SetDrawScreen(DX_SCREEN_BACK); // 画面全体を白で描画 DrawBox(0, 0, 640, 480, GetColor(255, 255, 255), TRUE); // 描画ブレンドモードをアルファブレンドにする SetDrawBlendMode(DX_BLENDMODE_ALPHA, 64); // 中央に四角形を描画する DrawBox(240, 160, 400, 320, GetColor(0, 255, 0), TRUE); // 描画ブレンドモードをノーブレンドに戻す。 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); // 裏画面の内容を表画面に反映する ScreenFlip(); // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }

Page: 1 |

Re: SetDrawBlendMode()について ( No.1 )
名前: 日時:2008/12/18 19:41

過去の事例で、 DXライブラリは背景色とαブレンド行う場合 (特に無地で淡色なもの(黒や白))の場合 α値の合計が0または255となり、無効に なってしまう場合があります。 これは裏画面にセットしたことが原因ではなく、 背景になにも描画していないために、 黒(0)がそのα値とのブレンドされている ところにあると思われます。 ボックスを表示する前に、 背景に何か絵を描画してから、 ボックスを表示するとどうなるかを 試してみてください。 手前味噌ですが、過去ログです。 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1051
Re: SetDrawBlendMode()について ( No.2 )
名前:管理人 日時:2008/12/18 20:15

ご報告ありがとうございます 私の環境でも確認できました 修正版をアップしましたので、何度も申し訳ありませんが 宜しければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: SetDrawBlendMode()について ( No.3 )
名前:Sura 日時:2008/12/18 20:57

>通さま SetDrawBlendMode() のタイミングについてですが、 ブレンドする対象画像の直前に実行しております。 念のため、Ver2.25及び2.25bについて6通りのテストを行いましたので報告させていただきます。 1, 表画面で、DrawBox背景を描画、DrawBoxで重ね描画 2, 表画面で、DrawGraphで背景を描画、DrawBoxで重ね描画 3, 表画面で、DrawBox背景を描画後GetDrawScreenGraphでハンドルを取得しDrawGraphで背景を描画、DrawBoxで重ね描画 4, 裏画面で"1"の処理で描画 5, 裏画面で"2"の処理で描画 6, 裏画面で"3"の処理で描画 で、ブレンド処理が正常であればo無視されれば* とした表を示します。 Ver |1|2|3|4|5|6 2.25 |o|o|o|o|o|o 2.25b|o|o|o|*|o|o //テストコード #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; int GrHandle = LoadGraph("back.bmp"), MkHandle = MakeGraph(640, 480); // 描画先画面を裏にする SetDrawScreen(DX_SCREEN_BACK); //4,5,6以外コメントアウト // 画面全体を白で描画 DrawBox(0, 0, 640, 480, GetColor(255, 255, 255), TRUE); //2,5はコメントアウト GetDrawScreenGraph(0,0,640,480,MkHandle); //3,6以外コメントアウト DrawGraph(0, 0, GrHandle, TRUE); //2,5以外コメントアウト DrawGraph(0, 0, MkHandle, TRUE); //3,6以外コメントアウト // 描画ブレンドモードをアルファブレンドにする SetDrawBlendMode(DX_BLENDMODE_ALPHA, 64); // 中央に四角形を描画する DrawBox(240, 160, 400, 320, GetColor(0, 255, 0), TRUE); // 描画ブレンドモードをノーブレンドに戻す。 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); // 裏画面の内容を表画面に反映する ScreenFlip(); // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }
Re: SetDrawBlendMode()について ( No.4 )
名前:Sura 日時:2008/12/18 21:14

>管理人様 修正版ありがとうございます。 確認したところ正常に機能いたしました。 再三にわたってご面倒をおかけいたしました。 誠に感謝致しております。

Page: 1 |