Разрешение шкалы в Pyglet - PullRequest
       17

Разрешение шкалы в Pyglet

2 голосов
/ 19 декабря 2011

Я использую библиотеку pyglet (OpenGL), и я хочу иметь возможность изменять виртуальное разрешение без изменения размера окна. Например, поле 2х2 будет отображаться на экране размером 4х4 пикселя. Я знаю, что могу найти все, что рисуется, и масштабировать его индивидуально, но это, вероятно, будет дорогостоящим. Я не мог найти решение для этого онлайн (если оно вообще существует), поэтому любая помощь будет принята с благодарностью. Пояснение: я думаю в соответствии с настройками разрешения в большинстве игр. Окно остается в полноэкранном режиме с тем же размером, но масштаб изменяется.

Ответы [ 2 ]

4 голосов
/ 25 июня 2012

Вам необходимо импортировать openGL, чтобы получить доступ к функции масштабирования:

from pgylet.gl import *

Затем, после инициализации окна вашей игры, введите следующий код:

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

Atв этот момент ваше разрешение удвоится, но ваше окно останется прежним.Вы можете легко исправить это, удвоив ширину и высоту вашего окна.Кроме того, ваши текстуры будут выглядеть размытыми, поэтому мы должны это исправить.Нам нужно установить параметры для текстур в вашей функции 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 голос
/ 19 декабря 2011

Разъяснение: я думаю в соответствии с настройками разрешения в большинстве игр. Окно остается в полноэкранном режиме с тем же размером, но масштаб изменяется.

Нет, окно меняет размер , так как изменяется разрешение экрана и следующее окно.

Однако то, что вы намереваетесь сделать, это вполне возможно: сначала визуализируйте ваше изображение в FBO желаемого меньшего размера, а затем визуализируйте содержимое этого FBO, охватывающее полное окно. В случае, если 3D-движок использует некоторую форму постобработки (например, для глубины резкости, цветовой градации, эффектов композитинга), это происходит практически бесплатно.

...