トップページ > 記事閲覧
DrawBoxAAをつなげたい
名前:ななしのなし 日時: 2017/09/18 21:28

いつもお世話になってます。 質問というより要望なのですが、 以下のプログラムで、AやDを押すとBoxの境界線が見えたり消えたりします。 なんとかつなげられないでしょうか? よろしくお願いします。 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { ChangeWindowMode(true); SetGraphMode(320, 240, 32); //SetWindowSizeExtendRate(2.0); WaitVSync(true); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); float x = 0; while (!ProcessMessage()) { ClearDrawScreen(); if (CheckHitKey(KEY_INPUT_A))x -= 0.01f; if (CheckHitKey(KEY_INPUT_D))x += 0.01f; DrawFormatString(0, 40, GetColor(255, 255, 255), "x:%.2f", x); DrawFormatString(0, 55, GetColor(255, 255, 255), "100+x:%.2f", 100 + x); DrawFormatString(0, 70, GetColor(255, 255, 255), "101-(1-x):%.2f", 101 - (1 - x)); DrawPixel(100-1, 5, GetColor(255, 0, 0)); DrawBoxAA(0, 0, 100+x, 10, GetColor(0, 255, 0), true); DrawBoxAA(101-(1-x), 0, 200, 10, GetColor(0, 255, 0), true); ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: DrawBoxAAをつなげたい ( No.1 )
名前:管理人 日時:2017/09/19 23:54

DrawBoxAA などのアンチエイリアス付き図形描画のアンチエイリアスが掛かっている部分は 描画先のピクセルの色と図形のピクセルの色がアルファブレンドされているのですが、 アルファブレンドは単純な足し算ではないのでアルファブレンドの描画どうしが重なると 重なった部分が見えてしまいます なので、単純な足し算である加算ブレンドを使えば綺麗に繋がります // 加算ブレンドに変更 SetDrawBlendMode( DX_BLENDMODE_ADD, 255 ); // Boxを描画 DrawBoxAA(0, 0, 100+x, 10, GetColor(0, 128, 0), true); DrawBoxAA(101-(1-x), 0, 200, 10, GetColor(0, 128, 0), true); // 元に戻す SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ); Boxを加算ブレンドで描画すると不都合がある場合は、MakeScreen でBox画像作成用の 仮画面を作成して、そこにBoxを加算ブレンドで描画した後、仮画面を裏画面に描画すると 裏画面には加算ブレンドではないBoxを描画できます #include "DxLib.h" int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { int TempScreen; ChangeWindowMode(true); SetGraphMode(320, 240, 32); //SetWindowSizeExtendRate(2.0); WaitVSync(true); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); // Box描画用の仮画面を作成 TempScreen = MakeScreen( 200, 10, FALSE ); float x = 0; while (!ProcessMessage()) { ClearDrawScreen(); // Boxが加算ブレンドになってしまっていないかを確認するために背景を灰色で塗りつぶし DrawBox( 0,0,320,240, GetColor( 128,128,128 ), TRUE ); if (CheckHitKey(KEY_INPUT_A))x -= 0.01f; if (CheckHitKey(KEY_INPUT_D))x += 0.01f; DrawFormatString(0, 40, GetColor(255, 255, 255), "x:%.2f", x); DrawFormatString(0, 55, GetColor(255, 255, 255), "100+x:%.2f", 100 + x); DrawFormatString(0, 70, GetColor(255, 255, 255), "101-(1-x):%.2f", 101 - (1 - x)); DrawPixel(100-1, 5, GetColor(255, 0, 0)); // 描画先を仮画面に変更 SetDrawScreen( TempScreen ); // 仮画面をクリア ClearDrawScreen(); // 加算ブレンドで二つのアンチエイリアス付きBoxを描画 SetDrawBlendMode( DX_BLENDMODE_ADD, 255 ); DrawBoxAA(0, 0, 100+x, 10, GetColor(0, 128, 0), true); DrawBoxAA(101-(1-x), 0, 200, 10, GetColor(0, 128, 0), true); SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ); // 裏画面にBoxを描画した仮画面を描画 SetDrawScreen( DX_SCREEN_BACK ); DrawGraph( 0, 0, TempScreen, TRUE ); ScreenFlip(); } DxLib_End(); return 0; } よろしければお試しください m(_ _)m
メンテ
Re: DrawBoxAAをつなげたい ( No.2 )
名前:ななしのなし(解決) 日時:2017/09/20 07:00

ありがとうございます。助かりました(_ _;)
メンテ

Page: 1 |

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

   クッキー保存