XNA:不拉伸的正交窗口大小调整
本文关键字:窗口大小 调整 XNA | 更新日期: 2023-09-27 18:11:17
我已经致力于一个Windows游戏项目有一段时间了。我曾经有一个静态的1600 x 900分辨率,这对我来说很好。但对我的一些测试者来说却不是这样。
这让我开始关注基于xna的游戏的分辨率独立性。我已经经历了很多虚拟分辨率系统,在RenderTarget2D上绘制所有内容并拉伸以适应窗口大小。但这对我不起作用。我想知道的是如何计算一个类似于Terraria使用的投影矩阵。对于那些不知道terraria是如何工作的人(现在我认为它曾经是不同的),一旦你调整游戏窗口的大小,你会在屏幕上看到更多的东西。
目前我的投影矩阵是这样定义的:
Projection = Matrix.CreateOrthographicOffCenter(-25 * _graphics.Viewport.AspectRatio,
25 * _graphics.Viewport.AspectRatio,
-25, 25,
-1, 1 );
当窗口的大小水平变化时,此操作有效。我看到更多的东西,一切都很好。但是一旦我垂直调整了窗口的大小,所有的东西都夹在一起了。
是否有一种方法来计算投影矩阵,使它可以让我调整窗口的大小水平和垂直?
编辑:我间接使用了一个camera类。所有东西都在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);
如果在正射影投影中包含显示器的分辨率,我认为可以达到预期的效果。
Projection = Matrix.CreateOrthographicOffCenter(
0.0f, _graphics.Viewport.Width,
_graphics.Viewport.Height, 0.0f,
-1.0f, 1.0f);