OpenGL:将一种纹理叠加在另一种纹理上并抑制白色背景
我是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/
我希望背景在前景图片没有颜色(或白色)的地方可见。
你有两个选择,最简单的是使用alpha测试,并为你的前景图像添加一个alpha通道,这样每个白色像素(或者没有颜色区域)都有一个特殊的值,比如说0.0f和所有其他的1.0f。
然后,在渲染前景时,使用glEnable(GL_ALPHA_TEST)
启用alpha测试并使用glAlphaFunc(GL_GREATER, 0.5f)
设置alpha函数。这将只接受/绘制alpha值大于0.5f的片段,并放弃/不绘制所有片段有一个小于0.5f的alpha值。
第二个选择是像你一样使用混合,但是你还需要在你的前景中添加额外的alpha通道并正确设置glBlendFunc
。
更多在这里:http://iphone-3d-programming.labs.oreilly.com/ch06.html
链接地址: http://www.djcxy.com/p/33995.html上一篇: OpenGL: Overlay one texture over another and suppress white background