opengl - glBlendEquationSeparate 和 glBlendFuncSeparate - 片段着色器实现

标签 opengl glsl

我有一个 OpenGL 应用程序,它根据以下设置混合颜色:

glBlendEquationSeparate( GL_FUNC_ADD, GL_FUNC_ADD );
glBlendFuncSeparate( GL_ONE, GL_ONE, GL_ONE, GL_ONE );
以同样的方式,我想在片段着色器中混合两个纹理。上述混合设置是否转化为简单的添加:
vec4 colorA = texture( samplerA, texCoords );
vec4 colorB = texture( samplerB, texCoords ); 
vec4 colorC = colorA + colorB;
?

最佳答案

结果公式为

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_ONE, GL_ONE, GL_ONE, GL_ONE);


dst.rgb = 1 * src.rgb + 1 * dst.rgb
dst.a   = 1 * src.a   + 1 * dst.a
Blending与在片段着色器中计算颜色非常不同。
在这种情况下,当前片段颜色(和 alpha channel )被添加到帧缓冲区中的片段颜色(和 alpha channel )。所以是的,你可以把它想象成 colorA + colorB .

关于opengl - glBlendEquationSeparate 和 glBlendFuncSeparate - 片段着色器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69373972/

相关文章:

c++ - OpenGL Stenciling,将引用与写入的值分开?

c++ - 有和没有骨架的网格应该使用不同的着色器吗?

c++ - openGL 中的全屏

c++ - 带有立方体贴图数组的 glTextureStorage3D 上的 GL_INVALID_VALUE

glsl - GLSL 和 GLSL ES 2 之间的差异

opengl-es - SceneKit 使用纹理坐标绘制纹理

opengl - 未声明的标识符texture2DLodOffset的调用无效

glsl - Xtext:关键字作为标识符

c - 如何找到图形管道的瓶颈

java - 重新创建数组后的 NPE