Python 在OpenGL中将圆显示为正方形的图像

Python 在OpenGL中将圆显示为正方形的图像,python,opengl,pygame,textures,pyopengl,Python,Opengl,Pygame,Textures,Pyopengl,使用pyGame和pyOpenGL,我创建了一个2D曲面,我使用在Photoshop中创建的815x815 PNG作为纹理: 下面是我如何使用pygame加载图像,并将其转换为纹理 pygame.init() display = (800,600) pygame.display.set_mode(display, DOUBLEBUF|OPENGL) myTex = pygame.image.load('0.png') myTex = myTex.convert_alpha() myTexDat

使用pyGame和pyOpenGL,我创建了一个2D曲面,我使用在Photoshop中创建的815x815 PNG作为纹理:

下面是我如何使用pygame加载图像,并将其转换为纹理

pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
myTex = pygame.image.load('0.png')
myTex = myTex.convert_alpha()
myTexData = pygame.image.tostring(myTex, 'RGBA', 1)
myTexID = 0
glGenTextures(1, myTexID)
glBindTexture(GL_TEXTURE_2D, myTexID)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, myTex.get_width(), myTex.get_height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, myTexData)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
这是我用来画正方形和纹理的代码

glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glBegin(GL_QUADS)
glVertex2fv((-1,-1))
glTexCoord2f(0,1)
glVertex2fv((-1,1))
glTexCoord2f(1,1)
glVertex2fv((1,1))
glTexCoord2f(1,0)
glVertex2fv((1,-1))
glTexCoord2f(0,0)
glEnd()
下面是我运行代码时发生的情况。 如何使纹理正确显示,以及为什么会发生这种情况

编辑


这是某种透明度错误,因为将图像背景从透明更改为白色可以解决问题,但是,convert_alpha()并没有解决问题。另外,我不知道为什么这会被否决,这是一个合理的问题。

我怀疑罪魁祸首是透明度。根据创建png的方式,圆将至少有一些像素在一定程度上是透明的。如果pygame不知道这些透明度值,它会将其渲染为基色,而不管像素是否可见。阅读时,会看到关于pygame.image.load的以下简介:

对于alpha透明度,如.png图像,加载后使用convert_alpha()方法,以便图像具有每像素透明度

在注释中,有一个用户创建的函数(由anonymous创建,因此…请自行承担风险)使用此方法:

def load_image(file, colorkey=False):
    file = os.path.join('data', file)
    try:
        image = pygame.image.load(file)
        colorkey = image.get_at((0, 0))
        if colorkey is True:
            image.set_colorkey(colorkey, pygame.RLEACCEL)
    except:
        print 'Unable to load: ' + file
    return image.convert_alpha() #Convert any transparency in the image
你可以尝试使用它,或者我觉得你可以简单地:

myTex = pygame.image.load('0.png')
myTex = myTex.convert_alpha()

两者都没有任何区别。PNG是使用Photoshop创建的。