我如何使用 glblendfunc 混合两个图像?
how can i use glblendfuc to blend two image?
我想在我的着色器中混合两个纹理,所以我在着色器中的代码是这样的:
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);
它不能显示绿色,它显示黑色,我不知道出了什么问题以及如何解决...
你有一个基本的误解,如果你想混合片段着色器的输出,那么你必须使用 Dual Source Blending。
Blending,当连续渲染多个几何图形时,将合并片段的连续片段着色器输出。
此外,默认的帧缓冲区只有一个颜色缓冲区,因此写入帧缓冲区中的多个目标毫无意义。
如果您可以在片段着色器中访问两个纹理的颜色,那么您根本不需要任何 Blending,因为您可以 mix
片段着色器:
out vec4 fragColor;
void main(){
vec4 color1 = ...;
vec4 color2 = ...;
float a = 0.5;
fragColor = mix(color1, color2, a);
}
注意,或者 a
可以通过图像的 alpha 通道设置(例如 a = color2.a
)。
我想在我的着色器中混合两个纹理,所以我在着色器中的代码是这样的:
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);
它不能显示绿色,它显示黑色,我不知道出了什么问题以及如何解决...
你有一个基本的误解,如果你想混合片段着色器的输出,那么你必须使用 Dual Source Blending。
Blending,当连续渲染多个几何图形时,将合并片段的连续片段着色器输出。
此外,默认的帧缓冲区只有一个颜色缓冲区,因此写入帧缓冲区中的多个目标毫无意义。
如果您可以在片段着色器中访问两个纹理的颜色,那么您根本不需要任何 Blending,因为您可以 mix
片段着色器:
out vec4 fragColor;
void main(){
vec4 color1 = ...;
vec4 color2 = ...;
float a = 0.5;
fragColor = mix(color1, color2, a);
}
注意,或者 a
可以通过图像的 alpha 通道设置(例如 a = color2.a
)。