Pyglet中的缩放分辨率
我正在使用 pyglet(OpenGL)库,想要在不改变窗口大小的情况下,调整虚拟分辨率。举个例子,一个 2x2 的方块在屏幕上应该显示为 4x4 像素。我知道可以找到所有要绘制的东西,然后单独缩放它们,但这样做可能会很耗资源。 我在网上找不到相关的解决方案(如果真的存在的话),所以任何帮助都将非常感激。 补充说明:我想的类似于大多数游戏中的分辨率设置。窗口保持全屏且大小不变,但缩放比例会改变。
2 个回答
2
澄清一下:我在想大多数游戏里的分辨率设置。窗口保持全屏,但缩放会改变。
不,窗口的大小是会改变的,因为屏幕的分辨率被调整了,窗口会跟着变化。
不过,你想做的事情是完全可以实现的:首先把你的图像渲染到一个较小的帧缓冲区(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
现在,你应该能看到像素显示为原来大小的两倍。