トップページ > 過去ログ > 記事閲覧
大きい文字を縮小描画すると文字が震える
名前:TRIS-GRAM 日時: 2010/03/29 23:13

いつもお世話になっております。 文字列を大きい文字(サイズ80など)で1文字ずつDrawExtendStringで縮小描画しようとすると、文字が震えてしまいます(フレーム毎に位置がずれる)。 グラフィックボードなど環境依存の問題の可能性もあるのですが、どなたか原因と解決法をご存じの方はいらっしゃいますでしょうか。 よろしくお願いします。 OS:WindowsXP SP2 グラフィック:GeForce8600GT #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) return -1 ; SetDrawScreen(DX_SCREEN_BACK); char *msg = "半年ぶりに訪れた四十畳ほどの広さを持つ店内は、前にも増して混沌としているような気がした。"; char c[3]; SetFontSize(80); while(true){ ClearDrawScreen(); if(CheckHitKey(KEY_INPUT_ESCAPE)) break; for(int i=0 ; i<strlen(msg) ; i+=2){ c[0] = msg[i]; c[1] = msg[i+1]; c[2] = 0; DrawExtendString(i*20, 0, 0.5, 0.5, c, GetColor(255,255,255)); } WaitTimer(5); ScreenFlip(); } DxLib_End() ; return 0 ; }

Page: 1 |

Re: 大きい文字を縮小描画すると文字が震える ( No.1 )
名前:管理人 日時:2010/03/30 04:52

サンプルプログラムをお書き込みいただきありがとうございます、こちらでも現象を確認できました DXライブラリでは文字描画に1枚のテクスチャを使用したキャッシュを用意して高速に描画できるようにしているのですが、 サイズ80という巨大な文字ですと直ぐにキャッシュが埋まって、毎フレーム各文字が配置される キャッシュ用テクスチャ上での位置が変化するので、縮小描画という微妙な座標地が使用される 描画においてテクスチャ座標の変化が描画結果に1ピクセル単位の誤差を生み出し、結果として ブルブル震えるような見た目になってしまっていたようです 原理はさておきブルブル震えないようにキャッシュ処理に調整を加えたバージョンをアップしましたので、 よろしければダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) ですが、ただ更新するだけですとやっぱりまだ震えますので、DrawExtendString のループを始める前に SetDrawMode( DX_DRAWMODE_BILINEAR ) ; を実行して、描画モードをバイリニアフィルタリングモードに した上で DrawExtendString を呼び出すようにしてください
Re: 大きい文字を縮小描画すると文字が震える ( No.2 )
名前:TRIS-GRAM 日時:2010/03/30 19:42

早速の対応、ありがとうございます! 試してみたところ、震えずに描画されました。 改良は無理かもと思っていたので、とても助かりました!

Page: 1 |