【问题标题】:OpenGL ES 2.0 : paint in FBO + Texture = gray blending in textureOpenGL ES 2.0:在 FBO + 纹理中绘制 = 纹理中的灰色混合
【发布时间】:2015-11-30 17:33:51
【问题描述】:

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

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) 将纹理添加到白色背景时看到的:

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

有人能帮我理解为什么我的纹理中有这种灰色的笔触吗?因为我需要对这个纹理进行截图,并且我希望有相同的渲染但没有白色背景。

  • [第一张图片] 当我绘制“视图”时,我的背景是白色的
  • [第二张图片]但我将笔画存储在具有透明背景的纹理中

【问题讨论】:

  • 有问题吗?
  • @Columbo :我认为这很清楚 :) 我不想存储这个灰色的笔画,而是存储我看到的笔画,“原样”。

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


【解决方案1】:

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

您有两个选择,1) 不要混合着色器,2) 使用不同的混合功能(我发现 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 效果很好)。我发现选项 2 最适合我,处理 OpenGL 混合函数是出了名的烦人。

【讨论】:

  • 感谢您的帮助!我不确定你是否理解你所看到的永远不会在纹理之外渲染:这只是在有或没有白色背景的情况下显示的内容。你觉得问题还是一样吗?
猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多