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

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

Спасибо!

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), и я хочу, чтобы ALPHA была взята из текстуры.


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

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

licensed under cc by-sa 3.0 with attribution.