XNA:正交窗口调整大小不拉伸
我一直在为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);
如果包括在正交投影中显示的分辨率可以达到我想的效果。
Projection = Matrix.CreateOrthographicOffCenter(
0.0f, _graphics.Viewport.Width,
_graphics.Viewport.Height, 0.0f,
-1.0f, 1.0f);
如果我记得正确的话,我已经尝试过了,但是一旦我下班回家,我会再次测试并报告结果。 – aRkker 2013-04-29 12:04:07
的确,我曾尝试过,它显示了我的整个世界,而不仅仅是相机显示的内容。我会在原始问题中增加一个关于相机使用的提及。 – aRkker 2013-04-29 13:50:53
因为正交矩阵的高度与屏幕分辨率无关。它被硬编码为-25到+25。无论窗户有多大,您只能看到相同的50个单位的垂直空间。您可以尝试使用当前屏幕高度与所需屏幕高度的比率* 25。在1080p你将有1080/900 * 25 – gareththegeek 2013-04-29 16:05:37
为什么不在每次窗口重新调整大小时调用上面的代码位呢? – ClassicThunder 2013-04-28 21:50:25
我这样做,在Window.ClientSizeChanged事件中,但如上所述,它仅在水平调整窗口大小时起作用,并且在垂直方向上打开时会严重损坏。 – aRkker 2013-04-29 05:38:29