2015-08-06 2 views
-1

Использование Pygame и PyOpenGL, я создал 2D поверхность, я использовал 815x815 PNG, созданный в Photoshop в качестве текстуры: Image I'm using as a textureИзображение круга показывается как квадрат в OpenGL

Вот как я загрузка изображение, используя 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() 

Вот что происходит, когда я запускаю код. OpenGL screenshot Как получить текстуру для правильной отображения, и почему это происходит?

EDIT

Это какая-то ошибка прозрачности, так как изменение фона изображения от прозрачного до белого исправления проблемы, однако, convert_alpha() не решить эту проблему. Кроме того, я не знаю, почему это сокращается, это законный вопрос.

ответ

1

Я подозреваю, что виновником является прозрачность. В зависимости от того, как вы создали png, круг будет иметь как минимум несколько пикселей, которые в определенной степени прозрачны. Если pygame не знает эти значения прозрачности, он будет отображать его как базовый цвет, независимо от того, должен ли пиксель быть видимым или нет. Когда вы читаете the documentation, есть такая реклама о pygame.image.load:

Для альфа-прозрачности, как в .png изображения используется метод convert_alpha() после загрузки, так что изображение имеет за прозрачность пикселей.

В комментариях, есть созданный пользователем функции (анонимно, так что ... попробовать на свой страх и риск), который использует этот метод:

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() 
+0

Ничего не изменилось. PNG был создан с использованием Photoshop. – Bretsky

Смежные вопросы