しばらくの間、Windows 用のゲーム プロジェクトに取り組んでいます。以前は静的な 1600 x 900 の解像度を使用していましたが、これで問題なく動作しました。しかし、一部のベータ テスターにとってはそれほどでもありません。
これにより、XNA ベースのゲームにおける解像度の非依存性について調べるようになりました。私は、RenderTarget2D にすべてを描画し、それをウィンドウ サイズに合わせて引き延ばす、多くの仮想解像度システムを試してきました。しかし、それは私にはうまくいきません。
私が知りたいのは、Terraria が使用するものと同様の射影行列を計算する方法です。terraria でどのように機能するかを知らない人のために説明すると (今はともかく、以前は違っていたと思います)、ゲーム ウィンドウのサイズを変更すると、画面上により多くのものが表示されます。
現在、私の射影行列は次のように定義されています。
Projection = Matrix.CreateOrthographicOffCenter(-25 * _graphics.Viewport.AspectRatio,
25 * _graphics.Viewport.AspectRatio,
-25, 25,
-1, 1 );
これは、ウィンドウのサイズが水平方向に変化するときに機能します。横に見えるものが増え、すべて問題ありません。しかし、ウィンドウを垂直方向にサイズ変更すると、すべてが一緒に固定されます。
ウィンドウのサイズを水平方向と垂直方向の両方に変更できるように、射影行列を計算する方法はありますか?
編集:
カメラクラスを間接的に使用しています。すべてが Farseer Physics 座標空間にあり、何かが画面に描画されると、Viewport.Unproject() によって変換されます。
解決策:
選択した回答のコメント セクションで gareththegeek が指摘したように、私が求めていた特定の射影行列は次のように形成されます。
Projection = Matrix.CreateOrthographicOffCenter(-(_graphics.Viewport.Width / 1600f * 44),
(_graphics.Viewport.Width / 1600f * 44),
-(_graphics.Viewport.Height / 900f * 25), (_graphics.Viewport.Height / 900f * 25),
-1, 1);