我一直在为Windows游戏项目工作一段时间。我曾经有一个静态的1600 x 900分辨率,这对我来说很好。但对于我的一些beta测试者来说并非如此。
这使我开始研究基于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);
答案 0 :(得分:1)
如果在正投影中包含显示器的分辨率,我可以达到预期的效果。
Projection = Matrix.CreateOrthographicOffCenter(
0.0f, _graphics.Viewport.Width,
_graphics.Viewport.Height, 0.0f,
-1.0f, 1.0f);