混合。 边缘有黑色
我正在开发iPhone游戏。 我有下面的源图像将其绘制到背景。 源图像具有阿尔法0x00和围绕边缘的渐变,并且背景的阿尔法是0xff。 当我将源图像绘制到背景时,我会看到“结果”图像的黑色。 我正在使用OpenGL ES glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方法。 我已经改变了每一个可能的论点,但每次都没有移动。
为什么我在源图像的边缘有黑色? 问题是什么? iphone中的每款游戏都不会使用渐变?
我是否需要用渐变来制作源图像?
有谁知道解决方案?
源图像:
结果图像:
你的图像是否预先乘以alpha? 那么你应该使用
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
这里是对它是什么的一些解释。
注意:我在做了一些研究之后重写了答案。 文章rotoglup提到了一些有关发生了什么的洞察力,它更有意义,然后我的原始公式。 我也试着看看其他人在他们的代码中使用了什么,看起来这个公式是最常用的。 真正令人惊讶的是,像alpha混合这样的3D图形中如此基本的东西会如此引起争议,每个人似乎都在重新发明轮子并提出自己的解决方案。
只需检查你正在绘制的视图是不透明的还是不透明的。 将不透明属性设置为false
这种情况发生的一种方法是,如果您没有正确设置缩放和放大滤镜的glTexParameteri以及钳位方法。 请参阅Adam Redwood的评论。 注意两个幂次纹理,纹理边界等问题也可能发挥作用。
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 );
链接地址: http://www.djcxy.com/p/31831.html