トップページ > 過去ログ > 記事閲覧
スクリーンの拡大化
名前:Suou 日時: 2007/09/30 02:56

現在ウィンドウサイズ320*240でゲームを作っています。 これだとフルスクリーンに対応できないビデオカードがあるので、 2倍のサイズ、640*480に拡大して表示できないものかと考えています。 そこで、 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=458 の記事を参考にして、 // 320*240の描画可能なスクリーンを作成 static int preScreen = MakeScreen( 320, 240 ); // 描画先に指定 SetDrawScreen( preScreen ); 〜描画処理(以下メインループ内)〜 // 画面をコピーするバッファを作成 static int tempGraph = MakeGraph( 320, 240 ); // バッファにスクリーンをコピー GetDrawScreenGraph( 0, 0, 320, 240, tempGraph ); // 描画先をフロントスクリーンに指定 SetDrawScreen( DX_SCREEN_FRONT ); // ドットを強調したいのでニアレストネイバー法 SetDrawMode( DX_DRAWMODE_NEAREST ); // フロントスクリーンに2倍化して描画 DrawRotaGraph( 0, 0, 2.0, 0.0, tempGraph, false, false ); // 描画先を戻す SetDrawScreen( preScreen ); // スクリーンクリア ClsDrawScreen(); と言う風に実装できたのですが、何故か画面の左上の4分の一の領域しか描画されない上に、 30FPSと速度が非常に遅いものでした。(60FPSを想定) これを、なんとかして高速化できないものでしょうか? どなたかご教授願います。

Page: 1 |

Re: スクリーンの拡大化 ( No.1 )
名前:管理人 日時:2007/10/02 12:54

リファレンスには載っていませんが、以下の関数を使用することで ウインドウのサイズをDXライブラリで設定している画面サイズより 大きくすることが出来ます。 // 描画画面のサイズに対するウインドウサイズの比率を設定する int SetWindowSizeExtendRate( double ExRate ); 例えば 320x240 の画面を 640x480 のサイズで表示したい場合は SetWindowSizeExtendRate( 2.0 ); として頂ければOKです。(負荷もデスクトップ画面に画像を転送する 面積が4倍になった分くらいしか上がりません)  ただ、この機能を使用する場合は表画面への描画は正しく行え ませんので、必ず裏画面を使用する必要があります。  もしお使いのバージョンに SetWindowSizeExtendRate 関数が ありませんでしたら、こちらの最新バージョンをお使いになって下さい。 http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: スクリーンの拡大化 ( No.2 )
名前:Suou 日時:2007/10/02 19:11

非公開関数は一応チェックしたつもりだったのですが、やっぱりありましたか、申し訳ありません。 頂いた最新バージョンで実装してみたところ、充分な速度を得ることができました。 しかし、こちらの環境だとニアレストネイバー法を指定している(あまり関係ないかもしれませんが……) にもかかわらず、ドットがにじんで表示されてしまいます。 (Intel 82865G Graphics Controller と ATI Mobility Radeon X1400で確認) また、Intel 82865G Graphics Controllerの方だと、フルスクリーン時に320*240の表示のままでした。 (つまり、画面の左上に等倍で表示される) もし改善できるならば、お時間のある時に対応をお願いします。
Re: スクリーンの拡大化 ( No.3 )
名前:管理人 日時:2007/10/25 01:54

Suouさんどうも、DXライブラリの管理人です。  すいません、SetWindowSizeExtendRate 関数はウインドウモードでのみ 有効な関数でした。  フルスクリーンでも拡大された画像を描画する場合は、描画可能な320x240の 画像を作成して、裏画面の代わりにその画像に必要な描画処理を行った後、 裏画面に DrawExtendGraph 関数を使用して 0,0〜640,480 の範囲に拡大描画 するという手法を使います。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x, add, tempScreen; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画可能な仮画面を作成 SetDrawValidGraphCreateFlag( TRUE ); tempScreen = MakeGraph( 320, 240 ); SetDrawValidGraphCreateFlag( FALSE ); // メインループ(何かキーが押されたらループを抜ける) x = 0; add = 8; while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { // 移動 x += add; if( x < 0 || x > 320 ) add = -add; // 画面のクリア SetDrawScreen( tempScreen ); ClearDrawScreen(); // 円の描画 DrawCircle( x, 64, 32, GetColor(255,255,255), FALSE ); // 仮画面の内容を裏画面に描画して、さらに裏画面の内容を表画面に反映 SetDrawScreen( DX_SCREEN_BACK ); DrawExtendGraph( 0, 0, 640, 480, tempScreen, FALSE ); ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }  ただ、描画可能な画像は正常に処理されないグラフィックスチップも 存在するので、動作可能な環境は減ると思います。(オプションでON/OFF 出来るようにしておくと良いかも)

Page: 1 |