XNA:正交窗口调整大小而不拉伸

时间:2013-04-28 16:35:17

标签: c# xna window 2d orthographic

我一直在为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);

1 个答案:

答案 0 :(得分:1)

如果在正投影中包含显示器的分辨率,我可以达到预期的效果。

Projection = Matrix.CreateOrthographicOffCenter(
    0.0f, _graphics.Viewport.Width,
    _graphics.Viewport.Height, 0.0f,
    -1.0f, 1.0f);