Немедленный режим не рисует альфа текстуру правильно
Как видно из названия, всякий раз, когда я включаю смешивание следующим образом:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Я не могу нарисовать текстуру, используя немедленный режим. Это текстура RGBA. Я подтвердил, что загрузка и генерация изображения работает правильно, так как, когда я "загружал" пиксель из графического процессора для отладки, значения альфа-канала казались правильными (например, не все из них были 255). Тем не менее, текстура просто исчезает при ее рисовании с включенным смешиванием:
glColor4ub(255, 255, 255, 0);
_texture->setActive(0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(_x, _y);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(_x + _width, _y);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(_x + _width, _y + _height);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(_x, _y + _height);
glEnd();
куда _texture->setActive()
просто называет это:
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, m_ID);
Без смешивания я получаю следующий результат:
Но при смешивании он просто ничего не рисует (опять же, альфа-значения текстуры подтверждаются правильными!):
Когда это должно выглядеть примерно так:
В чем здесь проблема?
Обновить
После применения glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
Теперь я получаю ожидаемый результат:
1 ответ
Я думаю, что нашел это:
glColor4ub(255, 255, 255, 0);
Предполагая, что вы примените текстуру с помощью GL_MODULATE, альфа будет смешана с "примитивным" цветом. Если установить альфа примитива на 0, то любое смешение с текстурой будет заканчиваться 0 альфа.
Я не уверен, что вы хотите сделать, поэтому я предлагаю сделать одно из следующего:
- Вместо этого примените текстуру, используя GL_REPLACE. Вызовите glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE). Текстурная среда является частью вашей (активной) конфигурации текстурного блока. С https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml
Для версий OpenGL 1.3 и выше или когда поддерживается расширение ARB_multitexture, glTexEnv управляет текстурной средой для текущего активного текстурного блока, выбранного с помощью glActiveTexture
- Установите примитивный цвет на (255, 255, 255, 255) руб.