トップページ > 過去ログ > 記事閲覧
フルスクリーン調整
名前:m 日時: 2010/09/12 03:39

hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1830 こちらのスレッドを参考にしながら800*480の解像度の画面をフルスクリーンにする挑戦をしているのですが、上手くいきません。 ディスプレイの解像度は1920*1080ですが、対応しているフルスクリーンの解像度として、800*600というものがあったので、これで試しています。 SetGraphDisplayArea( 0, 0, 800, 480 ); SetGraphMode( 800, 600, GetColorBitDepth() ); DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ); SetDraw3DScale( 480.0f / 800.0f ); SetDrawArea( 0, 0, 800, 480 ); として、あとは普通に ClearDrawScreen(); 描画処理(3D + 2D) ScreenFlip(); としています。しかしながら、2D部分は正しく描画出来ているものの、3D描画(モデル描画)部分が正しくないように見えます。 といいますのも、DxLib_Init()前を ChangeWindowMode( TRUE ); SetGraphMode( 800, 480, GetColorBitDepth() ); と置き換えてウインドウモードで起動した場合と結果が異なるからです。 正しくやり方を理解できていないだけだと思いますので、お手数ですが解決策をご教授できますでしょうか。

Page: 1 |

Re: フルスクリーン調整 ( No.1 )
名前:コーラ 日時:2010/09/12 04:54

SetDraw3DScale( 480.0f / 800.0f ); ここは SetDraw3DScale( 480.0f / 600.0f ); こうするんだった気がします。 しかし、自分でやって確かめたわけじゃないんで少し自信がないです。 アホなこと言ってたらすみません(汗。
Re: フルスクリーン調整 ( No.2 )
名前:m 日時:2010/09/12 14:14

アドバイスありがとうございます!そのように設定してみました。 しかしながら、やはり結果が異なります。気がついたこととしては、ウインドウモードの時には映らなかったはずの部分(画面上部)がみえており、逆に画面下部が見切れています。 つまり、カメラの注視点がズレている感じでしょうか。本来映したい部分より上にスライドしてしまっています。これは手動でカメラを動かし、ズラす必要があるのでしょうか・・・
Re: フルスクリーン調整 ( No.3 )
名前:コーラ 日時:2010/09/12 18:53

//1、基本プログラム。次のプログラムでこの画面をアスペクト比を保ちながら、800*600でフルスク化することを目標とする。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ //ウインドウモード ChangeWindowMode( TRUE ); // 画面解像度を800*480に設定 SetGraphMode( 800, 480, GetColorBitDepth() ); // DXライブラリの初期化 DxLib_Init(); // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // カメラ位置、注視点をセット SetCameraPositionAndTarget_UpVecY( VGet(0.0f, 0.0f, -1000.0f), VGet(0.0f, 0.0f, 0.0f) ) ; //描画領域の境目を分かりやすくするため、背景を青で塗ってみる DrawBox(0,0,800,480,GetColor(0,0,255),TRUE); //Zバッファの設定 SetUseZBuffer3D( TRUE ) ; SetWriteZBuffer3D( TRUE ) ; //球を3つ描画 DrawSphere3D( VGet( 0.0f, 400.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; DrawSphere3D( VGet( 0.0f, 0.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; DrawSphere3D( VGet( 0.0f, -400.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; //表画面へ反映 ScreenFlip(); // キー入力待ち WaitKey(); DxLib_End(); return 0; } //2、1の画面をアスペクト比を保ちながら、800*600の解像度でフルスクリーン化を目指す。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ // 800*480の画面をアスペクト比を保ちながら800*600にスケーリングするため、上下に60の黒帯を入れる SetGraphDisplayArea( 0, -60, 800, 480+60 ); // 画面解像度を800*600に設定 SetGraphMode( 800, 600, GetColorBitDepth() ); // DXライブラリの初期化 DxLib_Init(); // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); //描画領域を設定 SetDrawArea( 0, 0, 800, 480 ); //画面の消失点をスクリーン上の中央に設定 SetCameraScreenCenter( 800/2, 480/2 ) ; //スケール値を設定 SetDraw3DScale( 480.0f / 600.0f ); // カメラ位置、注視点をセット SetCameraPositionAndTarget_UpVecY( VGet(0.0f, 0.0f, -1000.0f), VGet(0.0f, 0.0f, 0.0f) ) ; //描画領域の境目を分かりやすくするため、背景を青で塗ってみる DrawBox(0,0,800,480,GetColor(0,0,255),TRUE); //Zバッファの設定 SetUseZBuffer3D( TRUE ) ; SetWriteZBuffer3D( TRUE ) ; //球を3つ描画 DrawSphere3D( VGet( 0.0f, 400.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; DrawSphere3D( VGet( 0.0f, 0.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; DrawSphere3D( VGet( 0.0f, -400.0f, 0.0f ), 200.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ; //表画面へ反映 ScreenFlip(); // キー入力待ち WaitKey(); DxLib_End(); return 0; } このようなやり方が正しいかはわかりませんが 私はこのような方法でフルスクリーン化する予定です。 一応、私の環境ではこれで上手くいく(ように見える)ことを確認しました。 これでいけないでしょうか?
Re: フルスクリーン調整 ( No.4 )
名前:m 日時:2010/09/12 23:37

うまくいきました、ありがとうございます! 消失点を設定していなかったのが原因のようでした。 しかし、フルスクリーンモードにするとティアリングが発生しまいます。 SetWaitVSyncFlag( TRUE ); は入れてありますが、効果はありませんでした。 通常の800*600でのフルスクリーンでは発生しなかったので、 SetGraphDisplayAreaか、SetDraw3DScaleか、とにかくこれらが原因のようです。 回避策はありますでしょうか?
Re: フルスクリーン調整 ( No.5 )
名前:m 日時:2010/09/12 23:48

さらに複数問題点を発見しました。 フルスクリーン→Alt+Tab→デスクトップに戻してからまたゲーム画面に戻すと、 1. SetJoypadInputToKeyInputの設定が消える?のか、キー入力とパッドの入力の対応が合わなくなる。 2. 3Dのスケール値か注視点かプロジェクションがリセットされるのか、カメラで見える範囲が変わってしまう。 の2点です。
Re: フルスクリーン調整 ( No.6 )
名前:コーラ 日時:2010/09/13 10:21

私の環境では発生していない(ように見える)ので分かりません・・・。 尚、私はカメラやスケール値は毎フレーム設定しているので、そのおかげの可能性もあります。 やったことないので解決できるか分かりませんが 確か、画面モードの変更を検知して関数を実行する機能が DXライブラリにあった気がするので、それが使えるかもしれません。
Re: フルスクリーン調整 ( No.7 )
名前:m 日時:2010/09/17 00:39

SetChangeScreenModeGraphicsSystemResetFlag( FALSE ); を実行してみているのですが、やはりダメです。管理人さんの対応をお待ちすることにします。
Re: フルスクリーン調整 ( No.8 )
名前:いっち 日時:2010/09/17 20:22

実行環境の情報と、再現用のソースをご提供頂けますでしょうか?
Re: フルスクリーン調整 ( No.9 )
名前:管理人 日時:2010/09/17 22:30

> フルスクリーン→Alt+Tab→デスクトップに戻してからまたゲーム画面に戻すと、 >  > 1. SetJoypadInputToKeyInputの設定が消える?のか、キー入力とパッドの入力の対応が合わなくなる。 > 2. 3Dのスケール値か注視点かプロジェクションがリセットされるのか、カメラで見える範囲が変わってしまう。 こちらの二点を修正したバージョンをアップしましたので、よろしければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) ティアリングについてですが、お使いのバージョンは 3.03 でしょうか? もしそうでしたら Ver3.04 や、今回の修正バージョンでは直っていると思います > コーラさん ご対応ありがとうございます > いっちさん ご対応ありがとうございます、コーラさんが書き込んでくださったプログラムで 再現できました (^ ^;
Re: フルスクリーン調整 ( No.10 )
名前:m 日時:2010/09/18 00:55

ティアリングの修正、 >2. 3Dのスケール値か注視点かプロジェクションがリセットされるのか、カメラで見える範囲が変わってしまう。 この2点の修正を確認いたしました。管理人様、ありがとうございます。 しかしながら、SetJoypadInputToKeyInputの設定が狂ってしまう不具合に関しては相変わらず治っておりませんでした。 正しく動作させる条件があるのでしょうか?
Re: フルスクリーン調整 ( No.11 )
名前:管理人 日時:2010/09/19 01:43

> しかしながら、SetJoypadInputToKeyInputの設定が狂ってしまう不具合に関しては相変わらず治っておりませんでした。 > 正しく動作させる条件があるのでしょうか? すみません、改めて確認したところ、修正できていませんでした orz 今度こそ直っていますので、よろしければお試し下さい http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |