2010-02-20 2 views
2

Я использую C++ и OpenGL для создания базовой 2D-игры, у меня есть png-изображение с прозрачными областями для моего плеера. Он отлично работает на моих ноутбуках и лабораторных компьютерах, но на моем рабочем столе весь образ в основном просматривается, а не только те области, которые должны быть. Что может вызвать/исправить это?OpenGL Texture Transparency

Вот код, который я использовал, и то же самое на всех машинах

glPushMatrix(); 
glEnable(GL_TEXTURE_2D);  
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glBindTexture(GL_TEXTURE_2D, playerTex); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

glTranslatef(XPos, YPos, 0.0); 
glRotatef(heading, 0,0,1); 
    glBegin(GL_POLYGON); 
     glTexCoord2f(0.0, 1.0); glVertex2f(-40,40); 
     glTexCoord2f(0.0, 0.0); glVertex2f(-40,-40); 
     glTexCoord2f(1.0, 0.0); glVertex2f(40,-40); 
     glTexCoord2f(1.0, 1.0); glVertex2f(40,40); 
    glEnd(); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 
glPopMatrix(); 
+0

Желаю, чтобы я мог дать вам больше upvotes .. :) ваш код спас меня .. :) –

ответ

3

Я нашел эту проблему, я изменил

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

в

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

и она работает правильно, не знаю, почему, хотя.

+4

Поскольку mipmaps не более автоматически построены? – Luca

+0

@LucaPiccioni: Yup, в сочетании с различными разрешениями на разных компьютерах. – Macke

2

ли устанавливающих glColor4f (1,1,1,1) помочь? (Я не могу вспомнить, влияет ли GL_REPLACE на цвет вершин)

Проверьте glGetError() в соответствующих местах, чтобы убедиться, что вы ничего не делаете.

Другие общие советы:

  • пытаются заблокировать все свободные концы рендер состояния.
  • убедитесь, что ваш PNG-read lib работает правильно везде. (создайте данные текстуры в коде в противном случае)
  • Возможно, это связано с оборудованием, и тогда это поможет, если вы укажете ОС: es и типы/драйверы.
  • Я предполагаю, что вы используете тот же исполняемый файл на всех компьютерах?
+0

GL_REPLACE означает замену цвета вершин (точнее, выход на предыдущем этапе), так что нет, это не влияет на него. – Bahbar

+0

Я попробовал glGetError() не получает ничего из этого ОС: Win 7 32bit и в лаборатории Vista 64bit CPU: на рабочем столе является Intel E6600, некоторые другие Core 2 Duo на ноутбуке графика: на настольном ATI Radeon X1900, ноутбук Intel Integrated – Chris