2

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

4

2 回答 2

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

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

于 2012-06-25T04:16:34.230 回答
2

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

不,窗口确实改变了大小,因为屏幕分辨率改变了,窗口也跟着改变了。

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

于 2011-12-19T09:39:35.777 回答