Немедленный режим не рисует альфа текстуру правильно

Как видно из названия, всякий раз, когда я включаю смешивание следующим образом:

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

Без наложения получаю следующий результат:

actual_no_blending

Но при смешивании он просто ничего не рисует (опять же, альфа-значения текстуры подтверждаются правильными!):

actual_blending

Когда это должно выглядеть примерно так:

ожидаемый

В чем здесь проблема?

После применения glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);Теперь я получаю ожидаемый результат:

output_final

0

Решение

Я думаю, что нашел это:

glColor4ub(255, 255, 255, 0);

Предполагая, что вы примените текстуру с помощью GL_MODULATE, альфа будет смешана с «примитивным» цветом. Если установить альфа примитива на 0, то любое смешение с текстурой будет заканчиваться 0 альфа.

Я не уверен, что вы хотите сделать, поэтому я предлагаю сделать одно из следующего:

  1. Вместо этого примените текстуру, используя 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

  1. Установите примитивный цвет (255, 255, 255, 255) руб.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]