我有一个 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/