OpenGL текстурная прозрачность - PullRequest
2 голосов
/ 20 февраля 2010

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

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

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();

Ответы [ 2 ]

3 голосов
/ 21 февраля 2010

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

до

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

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

2 голосов
/ 20 февраля 2010

Помогает ли настройка glColor4f (1,1,1,1)? (Я не могу вспомнить, влияет ли цвет вершины на GL_REPLACE)

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

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

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