这就是我在片段着色器中渲染画笔的方式:
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) 将我的纹理添加到我的白色背景时看到的:
但这就是我在纹理中得到的:
谁能帮我理解为什么我的纹理中有这个灰色笔划?因为我需要截取这个纹理的屏幕截图,并且我想要具有相同的渲染但没有白色背景。
- [第一张图片] 当我绘制“ View ”时,我有一个白色背景
- [第二张图片] 但是我将笔画存储在具有透明背景的纹理中
最佳答案
您正在执行两种混合操作,一种在您的着色器中,一种使用 glBlendFunc
调用。当直接渲染到屏幕时,它不会第二次应用 glBlendFunc
,但是,当渲染到纹理时,它会在渲染到纹理时应用,然后在将纹理渲染到屏幕时再次应用.
您有两个选择,1) 不混合着色器,2) 使用不同的混合函数(我发现 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
效果很好)。我发现选项 2 最适合我,处理 OpenGL 混合函数是出了名的烦人。
关于c++ - OpenGL ES 2.0 : paint in FBO + Texture = gray blending in texture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400083/