Как масштабировать размер текстуры pyopengl до размера окна pygame?

Размер окна: 640 * 480

Размер текстуры: 1280 * 720

Здравствуйте, как я могу масштабировать текстуру до окна pygame?


person seeu    schedule 03.05.2020    source источник
comment
Пожалуйста, укажите в вопросе свой код, а не только его изображения. На многих устройствах и для людей с ограниченными возможностями ваши изображения нечитаемы. Кроме того, если кто-то захочет воспроизвести вашу проблему, ему придется перепечатать ваш код. Пожалуйста, сделайте так, чтобы другие могли легко помочь вам.   -  person Dragonthoughts    schedule 04.05.2020


Ответы (1)


Вы настроили ортогональную проекцию:

glOrtho(0, self.windowWidth, self.windowHeight, 0, -1, 1)

Если вы хотите, чтобы текстура заполнила все окно, вы должны нарисовать четырехугольник, соответствующий ортогональной проекции и форме координат текстуры от (0, 0) до (1, 1):

glEnable(GL_TEXTURE_2D)

glBegin(GL_QUAD)

glTexCoord2f(0, 0)
glVertex2f(0, 0)

glTexCoord2f(1, 0)
glVertex2f(self.windowWidth, 0)

glTexCoord2f(1, 1)
glVertex2f(self.windowWidth, self.windowHeight)

glTexCoord2f(0, 1)
glVertex2f(0, self.windowHeight)

glEnd()

Если вы хотите сохранить соотношение сторон текстуры, вам придется масштабировать размер квадрата. Например:

left = 0
top = 0
width = self.windowWidth
height = self.windowHeight

sx = self.windowWidth / textureWidth 
sy = self.windowHeight / textureHeight 
if sx > sy:
    width *= sy / sx
    left = (self.windowWidth - width) / 2
else:
    height *= sx / sy  
    top = (self.windowHeight - height) / 2

glEnable(GL_TEXTURE_2D)

glBegin(GL_QUAD)
glTexCoord2f(0, 0)
glVertex2f(left, top)
glTexCoord2f(1, 0)
glVertex2f(left + width, top)
glTexCoord2f(1, 1)
glVertex2f(left + width, top + height)
glTexCoord2f(0, 1)
glVertex2f(left, top + height)
glEnd()
person Rabbid76    schedule 03.05.2020
comment
Я заменил pygame на glfw. но отображение видео статично. - person seeu; 04.05.2020
comment
@seeu Извините, но это новый вопрос. Просьба задать общий вопрос и предоставить новый код. Но используйте снимки экрана с кодом, вы должны вставить код в новый вопрос. - person Rabbid76; 04.05.2020