画面の拡大動作について

ちょっといろいろなゲームでのアスペクト比維持のための動作をみてみましたが、いくつかパターンがあるようです。

以下のような種類ですね。

  1. とりあえず機能を無視してディスプレイ側の機能に任せる(スマートズーム機能に任せる)
  2. ユーザーにディスプレイのアスペクト比に合わせるように設定してもらって拡大+レターボックス(ピラーボックス)処理をグラフィックカードに処理してもらう
  3. ディスプレイの限界で拡大されると仮定してそのサイズに広がったときに正しくなるように必要に応じて縦方向(あるいは横方向)に縮めて描画してしまう

アスペクト比の保持機能があるプログラムはだいたい二番目の方式をとるものがほとんどです。WindowModePatchも二番目の方式です。

一番目は対応しなくてもいいので簡単ですが、ディスプレイの種類によっては横に引き延ばされたように見えるので、立ち絵が横に伸びたりしてギャルゲーなどではちょっと不気味になってしまいます。

三番目については、この方式をとっているプログラムはそれほど多くないのですが、この方式の場合、ディスプレイのアスペクト比の検知に失敗すると描画が見苦しくなるのと、

システムカーソルが横方向に拡大しているように見えるのでちょっと微妙ですが、うまくはまればきれいに見えます。一度見たときはスマートズームモードだったのでびっくりしましたが・・・。

どちらにしても、実装するには

  • マウスのカーソル位置を内部で変換するために必要な処理を行う必要がある
  • ディスプレイの最適なアスペクト比を検知する必要がある
  • 初期化解像度(内部解像度)と実際の表示解像度の差を埋めるための処理を描画直前に挟む必要がある

をちゃんと行う必要があります。

この頃のディスプレイアダプタ(グラフィックカード)であれば、DirectX9以上はあるので、そいつにStretch処理を任せてしまえるので楽なのですが、

拡大処理が線形補完のために画面がぼやけてしまうのが欠点です自前でやるならうまいこと拡大してくださいね~。

ちなみにそろそろ修正版をリリースします。ほとんど修正されていません。ちょっと気になった点だけです・・・。

次はCOMとHRESULTの処理でしょうかね~。記事を書くことで自分の復習+メモ書きにもなるので使えます・・・。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL