トップページ > 記事閲覧
図形描画関数とマスクの組み合わせ
名前:moti 日時: 2021/12/13 23:41

MakeScreen()によりマスク用ハンドルを作り,そこにDrawTriangle()等の図形描画関数で複数描画,その描いた部分でくり抜く, といった処理を行うことはいけますでしょうか。 一度組んでみたのですが, #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int GraphHandle; int ScreenHandle; // ウインドウモードで起動 ChangeWindowMode(TRUE); // DXライブラリの初期化 if (DxLib_Init() < 0) return -1; // マスクスクリーンに使うアルファチャンネル付きの描画対象にできるグラフィックハンドルを作成 ScreenHandle = MakeScreen(640, 480, TRUE); // 描画先を裏画面にする SetDrawScreen(DX_SCREEN_BACK); // マスク機能の初期化を行う CreateMaskScreen(); // マスクスクリーンに使用するグラフィックハンドルとして MakeScreen で作成したグラフィックハンドルをセット SetMaskScreenGraph(ScreenHandle); // メインループ while (ProcessMessage() == 0) { // 描画先をマスク用の画像に変更 SetDrawScreen(ScreenHandle); // マスク用の画像をクリア ClearDrawScreen(); // 三角形を描画 DrawTriangle(0, 0, 200, 200, 0, 200, GetColor(0, 0, 0), TRUE); // 描画先を裏画面に変更 SetDrawScreen(DX_SCREEN_BACK); // 裏画面をクリア ClearDrawScreen(); // マスクを有効にする SetUseMaskScreenFlag(TRUE); // 1920*1080の画像を描画 LoadGraphScreen(0, 0, "test.png", TRUE); // マスクを無効にする SetUseMaskScreenFlag(FALSE); // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } この場合だと,三角形を描画した際にその部分以外がマスク処理によって描画されます。(アルファ値がなくなるから…?) この状況を逆にしたいです。
メンテ

Page: 1 |

Re: 図形描画関数とマスクの組み合わせ ( No.1 )
名前:管理人 日時:2021/12/14 05:52

> この状況を逆にしたいです。 リファレンスには載っていませんが、SetMaskReverseEffectFlag という関数に TRUE を渡して呼ぶと マスクの効果が逆になります // マスクイメージ内の数値に対する効果を逆転させる int SetMaskReverseEffectFlag( int ReverseFlag ) ; 呼ぶタイミングは DxLib_Init の後でも、描画の直前でも、いつでも大丈夫です よろしければお使いください m(_ _)m
メンテ
Re: 図形描画関数とマスクの組み合わせ ( No.2 )
名前:moti(解決) 日時:2021/12/15 19:21

実際に組んだプログラムで導入して動くことを確認しました! ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存