我正在开发iPhone游戏。我有下面的源图像将其绘制到背景。源图像具有alpha 0x00和边缘周围的渐变,背景的alpha为0xff。当我将源图像绘制到背景时,我会看到黑色,就像您可以看到结果图像一样。我正在使用OpenGL ES glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方法。我已经改变了所有可能的论点,但每次都没有被移动。
为什么我在源图像的边缘有黑色?问题是什么? iPhone中的每个游戏都不会使用渐变色吗?
我是否需要制作渐变的源图像?
有谁知道解决方案?
来源图片:
结果图片:
答案 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 );