Использовать только альфа-канал текстуры в OpenGL?

Эй, я пытаюсь нарисовать постоянный цвет в буфере кадра и смешать его, используя альфа-канал из текстуры RGBA. Я смотрел на glBlendFunc и glBlendColor, но не могу найти способ игнорировать значения RGB из текстуры. Я думаю, что мне придется самому вытащить альфа-значения и сделать вторую текстуру с GL_ALPHA. Есть лучший способ сделать это?

Спасибо!


person Chris    schedule 21.03.2010    source источник
comment
Лучший ответ довольно прост: используйте шейдеры. В коде GLSL вы можете использовать данные текстуры любым удобным для вас способом.   -  person Kos    schedule 12.02.2011


Ответы (2)


Я использую цветовую кодировку выбора. Это код, который я использую, чтобы прозрачные области текстурированного четырехугольника не выделялись:

glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);

glAlphaFunc(GL_GREATER, 0.5f);

glColor3ub(myColor[0], myColor[1], myColor[2]);

drawTexturedQuad();

По сути, я говорю, что хочу, чтобы RGB был таким, каким он был до применения текстуры (это будет myColor), и я хочу, чтобы АЛЬФА была взята из текстуры.

person ksullivan    schedule 12.02.2011

При использовании glBlendFunc GL_SRC_ALPHA и GL_DST_ALPHA можно использовать для выбора альфа-канала в вашей текстуре (какой выбор зависит от вашей операции смешивания и текстур). Для более подробных руководств по смешиванию см.:

Соответствующая документация OpenGL:

person Clinton    schedule 21.03.2010
comment
glBlendFunc позволяет вам выбирать различные значения альфа-канала и способы смешивания с ними, но, насколько мне известно, все это влияет на то, как вы масштабируете и комбинируете исходный и конечный цвета. Я пытаюсь игнорировать исходный цвет и смешать другой, используя только альфа-значение из текстуры RGBA. - person Chris; 21.03.2010
comment
Похоже, вы пытаетесь замаскироваться? См. Ссылку на учебник № 3 для раздела «маска на картинке». Это то, что вы пытаетесь сделать? - person Clinton; 21.03.2010