Как я могу использовать glblendfu c, чтобы смешать два изображения? - PullRequest
0 голосов
/ 23 марта 2020

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

out vec4 fragColor1;
out vec4 fragColor2;
void main(){
fragColor1=vec4(1.0,0.0,0.0,1.0);
fragColor2=vec4(0.0,1.0,0.0,1.0);
}

, когда я использую

glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ZERO);

, на экране отображается только красный цвет, но когда я использую

glEnable(GL_BLEND);
glBlendFunc(GL_ZERO,GL_ONE);

, он не может показывать зеленый, он показывает черный, я не знаю, что не так и как это исправить ...

1 Ответ

0 голосов
/ 23 марта 2020

У вас есть базовое c недоразумение, если вы хотите смешать выходные данные фрагментного шейдера, то вам придется использовать Dual Source Blending .
Blending , объединяет последовательные выходные фрагменты шейдера фрагмента для фрагмента, когда несколько геометрических объектов визуализируются последовательно.
Кроме того, стандартный кадровый буфер имеет только один цветной буфер, поэтому нет смысла связывать несколько целей в кадровом буфере.
Если вы можете получить доступ к цветам обеих текстур в фрагментном шейдере, то вам вообще не нужно смешивание , потому что вы можете mix цветов в фрагментном шейдере :

out vec4 fragColor;

void main(){
    vec4 color1 = ...;
    vec4 color2 = ...;
    float a = 0.5;

    fragColor = mix(color1, color2, a);
}

Примечание. В качестве альтернативы a может быть установлено альфа-каналом изображения (например, a = color2.a).

...