一段时间以来,我一直在为 Windows 开发一个游戏项目。我曾经有一个静态的 1600 x 900 分辨率,对我来说效果很好。但对于我的一些 Beta 测试人员来说,情况并非如此。
这让我开始研究基于 XNA 的游戏中的分辨率独立性。我经历了很多虚拟分辨率系统,它们在 RenderTarget2D 上绘制所有内容并拉伸它以适应窗口大小。但这对我不起作用。
我想知道的是如何计算与泰拉瑞亚使用的相似的投影矩阵。对于那些不知道它在 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);