【发布时间】:2021-09-28 17:54:32
【问题描述】:
我试图用这段代码将纹理放到四边形上:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
from PIL import Image
from numpy import array
def loadTexture(texture):
try:
text = Image.open(texture)
except IOError as ex:
print("Failed to open texture file: ", texture)
text = Image.open("0.png")
textData = array(list(text.getdata()))
textID = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glBindTexture(GL_TEXTURE_2D, textID)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, text.size[0], text.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, textData)
text.close()
return textID
def drawQuad(centerX, centerY, textureID):
verts = (
(centerX+1,centerY+1),
(centerX+1,centerY-1),
(centerX-1,centerY-1),
(centerX-1,centerY+1)
)
surf = (0, 1, 2, 3)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, textureID)
glBegin(GL_QUADS)
for vert in surf:
glVertex2f(verts[vert][0],verts[vert][1])
glTexCoord2f(verts[vert][0],verts[vert][1])
glEnd()
glDisable(GL_TEXTURE_2D)
def main():
pygame.init()
disp = (800,800)
pygame.display.set_mode(disp, DOUBLEBUF|OPENGL)
gluPerspective(45, (disp[0] / disp[1]), 0.1, 50.0)
glTranslatef(0.0, 0.0, -5)
textID = loadTexture("0.png")
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
drawQuad(0, 0, textID)
pygame.display.flip()
pygame.time.wait(10)
但是在加载纹理并循环运行drawQuad() 之后,我的屏幕上出现了这个混乱:
https://i.stack.imgur.com/5UMCf.png(由于愚蠢的信誉系统,无法直接嵌入图像)
如果这很重要,纹理文件格式为 .png,大小为 32x32
【问题讨论】:
-
在 drawQuad() 中(glVertex2f() 和 glTexCoord2f() )
标签: python opengl pygame pyopengl