我一直在为Windows游戏项目工作了一段时间。我曾经有一个静态的1600 x 900分辨率,对我来说工作得很好。但对于我的一些测试者来说并不是那么重要。XNA:正交窗口调整大小不拉伸
这让我在基于XNA的游戏中寻找分辨率独立性。我经历了很多虚拟分辨率系统,它们绘制RenderTarget2D上的所有内容,并将其扩展为适合窗口大小。但是这对我不起作用。
我想知道的是我如何计算一个类似于Terraria使用的投影矩阵。对于那些不知道它如何在terraria中工作的人(无论如何,我认为它曾经是不同的)是,一旦你调整游戏窗口,你会看到更多的东西在屏幕上。
目前我的投影矩阵的定义是这样的:
Projection = Matrix.CreateOrthographicOffCenter(-25 * _graphics.Viewport.AspectRatio,
25 * _graphics.Viewport.AspectRatio,
-25, 25,
-1, 1);
这工作时,窗口的大小水平变化。我侧身看到更多东西,一切都很好。但是,一旦我垂直调整窗口大小,所有东西都会夹在一起。
有没有一种方法来计算投影矩阵,以便它可以让我调整窗口的水平和垂直?
编辑:
我使用的相机类是间接的。一切都在Farseer物理坐标空间中,当某些东西被绘制到屏幕上时,它通过Viewport.Unproject()转换。
SOLUTION:
由于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);
为什么不在每次窗口重新调整大小时调用上面的代码位呢? – ClassicThunder 2013-04-28 21:50:25
我这样做,在Window.ClientSizeChanged事件中,但如上所述,它仅在水平调整窗口大小时起作用,并且在垂直方向上打开时会严重损坏。 – aRkker 2013-04-29 05:38:29