Pyglet中的比例分辨率

时间:2011-12-19 02:40:00

标签: python opengl scale resolution pyglet

我正在使用pyglet(OpenGL)库,我希望能够在不改变窗口大小的情况下更改虚拟分辨率。例如,2x2框将在屏幕上绘制为4x4像素。我知道我可以找到所有正在绘制的东西并单独进行缩放,但这可能会很昂贵。 我无法找到这个在线解决方案(如果它存在),所以任何帮助将不胜感激。 澄清:我正在考虑大多数游戏中的分辨率设置。窗口保持全屏,大小相同,但比例会发生变化。

2 个答案:

答案 0 :(得分: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

现在,您应该将像素显示为其原始大小的两倍。

答案 1 :(得分:1)

  

澄清:我在考虑大多数游戏中的分辨率设置。窗口保持全屏,大小相同,但比例会发生变化。

不,窗口 会改变大小,因为屏幕分辨率已更改,窗口随之而来。

然而,您打算完全可能做到这一点:首先将图像渲染到所需较小尺寸的FBO,然后渲染该FBO的内容覆盖整个窗口。在3D引擎使用某种形式的后期处理(如景深,颜色分级,合成效果)的情况下,这实际上是免费的。