混合是否与着色器的混合功能一起使用

时间:2019-06-17 06:27:06

标签: opengl glsl

这些是我的混合功能。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);

我使用混合功能在片段着色器中混合两个纹理。

FragColor = 
    mix(texture(texture1, TexCoord), texture(texturecubeMap, ransformedR), MixValueVariables.CubeMapValue ) * 
    vec4(result, material.opacity / 100.0); // multiplying texture with material value

尽管更改了Blend Equation或BlendFunc类型,但我在输出中看不到任何差异。

混合功能是否适用于混合类型。

1 个答案:

答案 0 :(得分:2)

  

mix函数是否可用于混合类型。

不。 Blending和glsl函数mix完全不同。

函数mix(x, y, a)总是计算x * (1−a) + y * a

混合从片段着色器获取片段颜色输出,并将它们与帧缓冲区的颜色缓冲区中的颜色合并。

如果您想使用Blending,则必须

  • 绘制具有第一个纹理的几何图形
  • 激活混合
  • 使用第二个纹理绘制几何

如果只想在片段着色器中混合纹理,则必须使用glsl算法。参见GLSL Programming/Vector and Matrix Operations

例如

vec4 MyBlend(vec4 source, vec4 dest, float alpha)
{
    return source * alpha + dest * (1.0-alpha);
}

void main()
{
    vec4 c1 = texture(texture1, TexCoord);
    vec4 c2 = texture(texturecubeMap, ransformedR);
    float f = MixValueVariables.CubeMapValue

    FragColor = MyBlend(c1, c2, f) * vec4(result, material.opacity / 100.0); 
}

根据需要调整功能MyBlend