iPhone opengl es alpha-blending。我的边缘有黑色

时间:2011-01-22 23:08:55

标签: iphone opengl-es alphablending

我正在开发iPhone游戏。我有下面的源图像将其绘制到背景。源图像具有alpha 0x00和边缘周围的渐变,背景的alpha为0xff。当我将源图像绘制到背景时,我会看到黑色,就像您可以看到结果图像一样。我正在使用OpenGL ES glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方法。我已经改变了所有可能的论点,但每次都没有被移动。

为什么我在源图像的边缘有黑色?问题是什么? iPhone中的每个游戏都不会使用渐变色吗?

我是否需要制作渐变的源图像?

有谁知道解决方案?

来源图片:

alt text

结果图片:

alt text

3 个答案:

答案 0 :(得分:14)

您的图片是否预先乘以alpha?然后你应该使用

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Here是对它的解释。

注意:我做了一些研究后重写了答案。提到的文章 rotoglup 对正在发生的事情有一些了解,它比我的原始公式更有意义。我还试着看看其他人在他们的代码中使用了什么,看起来这个公式是最常用的。令人惊讶的是,3D图形中像阿尔法混合这样的基本内容如此具有争议性,每个人似乎都在重新发明轮子并提出自己的解决方案。

答案 1 :(得分:0)

只需检查您正在绘制的视图是否不透明。将opaque属性设置为false

答案 2 :(得分:0)

如果您没有正确设置缩小和放大滤镜的glTexParameter,以及钳制方法,则可能出现这种情况。请参阅Adam Redwood的评论here。注意两个纹理纹理,纹理边界等问题也可能起作用。

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );