2011-12-19 86 views
2

我正在使用pyglet(OpenGL)庫,我希望能夠在不更改窗口大小的情況下更改虛擬分辨率。例如,一個2x2盒子將在屏幕上繪製爲4x4像素。我知道我可以找到所有正在繪製並逐個縮放的東西,但這可能會很昂貴。 我無法找到這個在線的解決方案(如果它甚至存在),所以任何幫助將不勝感激。澄清:我正在考慮大多數遊戲的分辨率設置。窗口以相同尺寸保持全屏顯示,但比例發生變化。Pyglet中的比例分辨率

+0

「我正在考慮大多數遊戲的分辨率設置。」遊戲中的分辨率設置會更改顯示器顯示的分辨率。對於全屏遊戲,這會改變*桌面*分辨率。 – 2011-12-19 02:50:23

回答

1

說明:我正在考慮大多數遊戲的分辨率設置。窗口以相同尺寸保持全屏顯示,但比例發生變化。

不,確實變化的大小,由於屏幕分辨率改變的窗口,該窗口如下。

然而,你打算完全可能做到這一點:首先將你的圖像渲染爲所需較小尺寸的FBO,然後渲染該FBO的內容覆蓋整個窗口。在3D引擎使用某種形式的後期處理(如景深,色彩分級,合成效果)的情況下,這實際上是免費的。

4

您需要導入的openGL以訪問縮放功能:

from pgylet.gl import * 

接下來,拋在下面的代碼你的遊戲的窗口已被初始化後:

#These arguments are x, y and z respectively. This scales your window. 
glScalef(2.0, 2.0, 2.0) 

此時你分辨率將翻倍,但您的窗口將保持相同的大小。您可以通過將窗口的寬度和高度加倍來輕鬆修正此問題。此外,你的紋理會顯得模糊,所以我們需要修復它。我們需要設置紋理參數在on_draw()函數:

def on_draw(self): 
     self.clear() #clears the screen 
     #The following two lines will change how textures are scaled. 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) 
     self.label.draw() #blits the label to the screen 

您現在應該有雙原始大小顯示像素。