2012-01-16 59 views
2

我正在開發基於瓦的2D OpenGL遊戲(自頂向下,2D塞爾達風格),我正在使用正交投影。我想讓這個遊戲兼容窗口和全屏。OpenGL正交視圖應用程序窗口到全屏

我最好創建縮放2D繪圖函數,以便在全屏模式下繪製時可以放大圖塊大小,或者我應該在窗口模式下完全設計遊戲,然後每當放大整個繪圖區域時玩家處於全屏模式?

最後,我希望在我的瓷磚重新縮放時保持最佳的紋理質量。

UPDATE /澄清:這是我的關注(這可能會或可能甚至不是一個真正的問題):如果我繪製整個窗口視圖大小的畫布區域,然後將其放大,我是有可能縮減原128x128像素紋理到64x64像素窗口大小的紋理,然後再將它們重新縮放到80x80,當我縮放整個遊戲區域以獲得全屏視圖時?

其他背景信息:我正在使用Java/LWJGL進行此遊戲,並且正在使用OpenGL 1.1函數進行繪圖。

+0

還不如縮小?從128x128px – rkmax 2012-01-16 04:45:16

+0

好點。我會修改這個問題,謝謝! – hithere 2012-01-16 04:55:50

+0

究竟是什麼問題? – rkmax 2012-01-16 15:27:17

回答

4

不要縮放瓦片,因爲您的全屏窗口比正常的窗口大,但要使用投影矩陣。

窗口變大了嗎?放大用於構建投影矩陣的參數。

如果要根據窗口大小調整瓦片大小與窗口大小的比例,請不要改變投影矩陣!關鍵是,如果你還沒有捕捉到projectiona矩陣:由於它,頂點被投影到視口上,實際上頂點被「縮放」,讓你選擇適當的單位系統而不用擔心縮放。


在幾句,正投影爲4個參數specified底部頂部。這些參數不過是投影到窗口屏幕邊界上的頂點的XY座標(真的是viewport)。

讓我們來做一些具體的例子。

實施例1

窗口大小:400x300的

OpenGL的頂點位置(2D):25×25

正投影矩陣: - 左= 0 - 右= 400 - 底部= 0 - 頂端= 300

模型視圖矩陣組身份

- >點將在窗口25×25繪製座標

實施例2

窗口大小:800x600(實例1加倍)

OpenGL的頂點位置(2D):25×25

正投影矩陣: - 左= 0 - 右= 400 - 底部= 0 - 頂端= 300

模型視圖矩陣設置爲標識

- >點將在窗口座標中以50x50繪製。由於正射投影沒有改變,因此翻倍了。

實施例3

設說我希望投影實施例1中的頂點即使窗口變化的寬高比。以前的窗戶是4:3。在這個例子中的窗口是16:9:它更大!這裏的技巧是迫使之間的比(右 - 左)(頂部 - 底部)

窗口大小:1600×900(一倍W.R.噸實施例1)

OpenGL的頂點位置(2D):25×25

正投影矩陣

  • 左= 0
  • 右= 533(300 * 16/9)
  • 底= 0
  • 頂= 300

模型視圖矩陣組身份

- >點將在25×25被吸入(代替33.3x25,如果我們使用實施例1的投影矩陣)在窗口座標。

+0

謝謝,盧卡!作爲後續問題,當我縮放到具有不同寬高比的不同顯示器時,是否有任何適當擴展投影矩陣的建議?現在,如果我從16:9窗口模式轉換到3:4全屏模式,我的遊戲視圖會變形。是否可以創建一個信箱投影矩陣? – hithere 2012-01-16 17:03:54

+0

謝謝你們的好例子!你真的幫了很大忙! :) – hithere 2012-01-16 18:46:17

+0

@Luca你也幫助我很多,因爲我正在爲自己的遊戲學習;) – rkmax 2012-01-16 20:52:12