Python Pyglet中的尺度分辨率

Python Pyglet中的尺度分辨率,python,opengl,scale,resolution,pyglet,Python,Opengl,Scale,Resolution,Pyglet,我正在使用pyglet(OpenGL)库,我希望能够在不更改窗口大小的情况下更改虚拟分辨率。例如,一个2x2框将在屏幕上绘制为4x4像素。我知道我可以找到正在绘制的所有内容,并对其进行单独缩放,但这可能会很昂贵。 我找不到一个在线解决方案(如果它存在的话),所以任何帮助都将不胜感激。 澄清:我在考虑大多数游戏的分辨率设置。窗口以相同的大小保持全屏显示,但比例会发生变化 澄清:我在考虑大多数游戏的分辨率设置。窗口以相同的大小保持全屏显示,但比例会发生变化 不,窗口确实改变了大小,因为屏幕分辨率改变

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


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

不,窗口确实改变了大小,因为屏幕分辨率改变了,窗口也随之改变


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

您需要导入openGL才能访问缩放功能:

from pgylet.gl import *
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
接下来,在游戏窗口初始化后输入以下代码:

#These arguments are x, y and z respectively. This scales your window.
glScalef(2.0, 2.0, 2.0)
此时,分辨率将加倍,但窗口大小将保持不变。您可以通过将窗口的宽度和高度加倍来轻松纠正此问题。此外,你的纹理会显得模糊,所以我们需要修复它。我们需要在on_draw()函数中为纹理设置参数:

from pgylet.gl import *
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

现在,您应该有两倍于其原始大小的像素显示

“我在考虑大多数游戏中的分辨率设置。”游戏中的分辨率设置会改变显示器显示的分辨率。对于全屏游戏,这会更改桌面分辨率。