2

一段时间以来,我一直在为 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);
4

1 回答 1

1

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

Projection = Matrix.CreateOrthographicOffCenter(
    0.0f, _graphics.Viewport.Width,
    _graphics.Viewport.Height, 0.0f,
    -1.0f, 1.0f);
于 2013-04-29T11:03:34.783 回答