我想你想要这两个图像的加法混合,对吗?我想到了两种方法。请注意,当使用加法混合时,您会自动获得更亮的颜色,因为这些值是相加的。
1)如果纹理中有原始立方体和模糊立方体,则使用这样的片段着色器渲染单个屏幕大小的四边形:
#version 300 es
precision mediump float;
uniform sampler2D originalTexture;
uniform sampler2D blurTexture;
in vec2 texCoord;
void main()
{
vec4 originalColor = texture(originalTexture, texCoord);
vec4 blurColor = texture(blurTexture, texCoord);
gl_FragColor = originalColor+blurColor;
}
这种方法的优点是您可以轻松地为颜色添加乘数以微调效果,例如,如果发光过多,则将其调低。
或者,您可以从几何体中正常渲染立方体。在这种情况下,只需将模糊纹理中的纹理查找添加到片段着色器中,然后添加颜色值。
2)您可以利用固定功能混合。首先像往常一样渲染原始立方体,然后设置混合模式:
glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);
现在,当您将模糊纹理和渲染绑定到同一个渲染目标时,它们应该重叠并为您提供效果。这给出了与上述着色器等效的结果。您可以尝试使用glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE)
too 来降低结果亮度。这种方法应该比着色器方法更快。
我不确定混合是否适用于 glBlitFramebuffer,但我想值得一试。希望其中一些有效!