2013-04-28 36 views
2

我一直在爲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); 
+0

爲什麼不在每次窗口重新調整大小時調用上面的代碼位呢? – ClassicThunder 2013-04-28 21:50:25

+0

我這樣做,在Window.ClientSizeChanged事件中,但如上所述,它僅在水平調整窗口大小時起作用,並且在垂直方向上打開時會嚴重損壞。 – aRkker 2013-04-29 05:38:29

回答

1

如果包括在正交投影中顯示的分辨率可以達到我想的效果。

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

如果我記得正確的話,我已經嘗試過了,但是一旦我下班回家,我會再次測試並報告結果。 – aRkker 2013-04-29 12:04:07

+0

的確,我曾嘗試過,它顯示了我的整個世界,而不僅僅是相機顯示的內容。我會在原始問題中增加一個關於相機使用的提及。 – aRkker 2013-04-29 13:50:53

+0

因爲正交矩陣的高度與屏幕分辨率無關。它被硬編碼爲-25到+25。無論窗戶有多大,您只能看到相同的50個單位的垂直空間。您可以嘗試使用當前屏幕高度與所需屏幕高度的比率* 25。在1080p你將有1080/900 * 25 – gareththegeek 2013-04-29 16:05:37