"Ootake" Nonsupport BBS ノンサポート掲示板 管理:ソフト開発グループ「Finath(ファイナス)」

現在までに、4531人の方が、この書き込みをご覧になっています。

20/08/08(土)12:36 汁ダーク
フルスクリーン時のアスペクト比調整について

少しは実用的な話です。
以前、私がOotakeをあまり使っていなかった理由は主に2つ。

(1)バイリニアフィルタがない
(2)主にノートPCを使っているので、フルスクリーン時の画面が横に引き伸ばされてしまう事が多い。

今使っているノートPCには、丁度会うスクリーンサイズが存在するので大丈夫w
この2点を別プラットホームでなんとかしたかった事もあって、当時のめり込んだ訳です。


で、今は別に困ってないんですけど、別プラットホームから移植している内に、対応策を思い付きました。

「起動直後のアスペクト比を記憶して、フルスクリーン時の横幅に反映」すればいいんじゃないかと。

通常、PCで使用している時の解像度は、X,Yが1:1になる設定にしてあるんじゃないかという、自分の経験からくる発想ですね。


私の場合は、どういう風に実現しているかOotakeのソースに即した感じで抜粋すると
[App.cpp]
Sint32
APP_GetGameWidth(
Sint32 magnification)
{

double wmag, hmag, fullmag, adjstmag = 1.0; // フルストレッチ時の倍率判定用

// フルスクリーン時は起動時のアスペクト比に調整する
if (_bFullScreen && _ScreenHeight > 0 && _WindowAspect > 0.0){
fullmag = (double)_ScreenWidth / _ScreenHeight;
// フルスクリーン時の方が小さかった場合は縮小する
if( fullmag < _WindowAspect ) adjstmag = fullmag / _WindowAspect;
}

// フルストレッチでアスペクト比固定の場合は倍率の低い方に合わせる
if (bFullStretche && bStretche && _GameWidth > 0 && _GameHeight > 0)
{
wmag = (double)_ScreenWidth / _GameWidth;
hmag = (double)_ScreenHeight / _GameHeight;
if( wmag > hmag ) wmag = hmag;
width = _GameWidth * wmag * adjstmag + 0.5;

void
APP_SetScreenSize()
{
int cx, cy;

cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);
if( cx > 0 && cy > 0 ){
_WindowAspect = (double)cx / cy;
}
}

[WinMain.cpp]

// 起動時の解像度アスペクト比を記憶する(フルスクリーン時の横幅調整に使用)
APP_SetScreenSize();


Ootakeとはストレッチの方針が少し違いますけど、参考になれば。

ただ、これで全員の環境にマッチするかどうかは・・・
少数だとは思いますけど、改悪になってしまう方もいるでしょうし。

利点としては、スペックの関係で低い解像度にしたい場合、引き伸ばされる様な解像度でも問題なくなる、位でしょうか。


20/08/16(日)20:40 Ootake作者
Re)フルスクリーン時のアスペクト比調整について

Ootakeのバイリニアフィルタは、スクリーンの設定がRealStretch(デフォルト)
の時にも使用しています。ぼやけすぎないように処理して使用しているために、
一般的なエミュレータのバイリニアフィルタよりシャープ方向の画質になって
います。

少し前のバージョンから、ぼやけの大きいバイリニアフィルタも追加しました。

"Screen->Mode"メニューの"TV Scanlined 2"か"Non Scanlined TV 2"だと、大き
めにぼやけます。大きなサイズのモニタやTVで離れてプレイする時に有用だと思
います。

丸め込み系のフィルタ(2xsaiやscaleなど)は、Ootakeでは実装していません。
理由は、キャラクターの雰囲気が実機と大きく異なってしまうことと、字も読み
づらくなることがあるからです。


フルスクリーン時のアスペクト比については、16:9のノートPCなら、低い解像度
でも16:9の解像度(1280x720等)選んでもらうかGPUのアスペクト比固定機能を使
ってもらえれば大丈夫と思います。

古いPCで1280x720でも重かったりGPUにアスペクト比固定が付いていない場合には、
汁ダークさんのおっしゃる方式は有効と思います。ただ、そのための実装でメニュ
ーのシンプルさやOotakeの開発の負担も掛かってきますので、今の所現状のままで
いこうと思います。

ちなみに近日公開のv2.98では、フルストレッチ以外のモードでですが、フルスク
リーン時でも画像のサイズを切り替えられるようにしたので、古いPCでも画面モー
ドの選択肢が増えたと思います。


メッセージ一覧へ戻る

Copyright(C)1997-2007 Kitao Nakamura.