Как масштабировать размер текстуры pyopengl до размера окна pygame? - PullRequest
1 голос
/ 03 мая 2020

Windows Размер: 640 * 480

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

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

1 Ответ

0 голосов
/ 03 мая 2020

Вы настроили проекцию orthographi c:

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

Если вы хотите, чтобы текстура заполнила все окно, вам нужно нарисовать квадратик, соответствующий проекции orthographi c и координаты текстуры от (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()
...