OpenGL:将一个纹理覆盖在另一个纹理上并抑制白色背景

时间:2010-06-25 03:19:38

标签: opengl-es background overlay image glblendfunc

我是Iphone opengl ES编程的首发。我有两个纹理,第一个是背景并占据全屏。我在第一张图片的顶部打印第二张图片,但第二张图片的白色背景覆盖了部分背景。我希望背景在前景图片没有颜色(或白色)的地方可见。我无法弄清楚如何正确使用glBlendFunc。

在打印第二张图片之前,我正在使用以下内容进行混合:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0f,1.0f,1.0f,1.0f);

图片位于:http://www.flickr.com/x/t/0097002/photos/vjv2010/

1 个答案:

答案 0 :(得分:0)

  

我希望背景可见   前景图片没有的地方   颜色(或白色)。

你有两个选择,最简单的选择是使用alpha测试并为你的前景图像添加一个alpha通道,这样每个白色像素(或没有颜色区域)都有一个特殊的值,让我们说'0.0f和所有其他1.0 F。

然后在渲染前景时,使用glEnable(GL_ALPHA_TEST)启用alpha测试,并使用glAlphaFunc(GL_GREATER, 0.5f)设置alpha函数。这将仅接受/绘制alpha值大于0.5f的片段并丢弃/不绘制所有alpha值小于0.5f的片段。

第二种选择是像你一样使用混合,但你还需要在前台添加额外的alpha通道并正确设置glBlendFunc

更多信息:http://iphone-3d-programming.labs.oreilly.com/ch06.html