OpenGL ES 2.0:在FBO中绘制+纹理=纹理中的灰色混合

时间:2015-09-04 14:03:48

标签: c++ ios objective-c opengl-es glsles

这是我在片段着色器中渲染画笔的方式:

gl_FragColor.rgb = Color.rgb;
gl_FragColor.a = Texture.a * Color.a;

在(0,0,0,0)纹理上使用此混合功能:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

这是我用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)将纹理添加到我的白色背景时看到的:

My stroke well viewed

但这就是我在纹理中得到的结果:

Wrong blending in texture

有人可以帮助我理解为什么我的纹理会出现这种灰色的笔触吗?因为我需要截取这个纹理的截图,我希望有相同的渲染但没有白色背景。

  • [第1张照片]当我画出"视图"我有一个白色背景
  • [第2张图片]但是我将笔划存储在具有透明背景的纹理中

1 个答案:

答案 0 :(得分:0)

您正在进行两个混合操作,一个在着色器中,一个使用glBlendFunc调用。当直接渲染到屏幕时,它不会再次应用glBlendFunc,但是,当渲染到纹理时,它会在渲染到纹理时应用,然后在将纹理渲染到屏幕时再次应用。

您有两个选项,1)不要混合您的着色器,2)使用不同的混合功能(我发现glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);可以正常工作)。我发现选项2对我来说效果最好,处理OpenGL混合函数非常令人讨厌。