【问题标题】:iPhone opengl es alpha-blending. I have black color in edgeiPhone opengl es alpha 混合。我的边缘有黑色
【发布时间】:2011-06-13 20:40:50
【问题描述】:

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

为什么我的源图像边缘有黑色?问题是什么? iphone里不是每个游戏都用渐变吗?

我需要制作没有渐变的源图像吗?

有人知道解决办法吗?

源图片:

结果图片:

【问题讨论】:

    标签: iphone opengl-es alphablending


    【解决方案1】:

    您的图像是否具有预乘 alpha?那么你应该使用

    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
    

    Here 是对它的一些解释。

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

    【讨论】:

    • 同意,这看起来像是典型的 alpha 倍乘法。
    • 不应该是ONE,ONE_MINUS_SRC_ALPHA吗?
    • 这里有一篇文章可以作为另一种解释来源:home.comcast.net/~tom_forsyth/…
    • @rotoglup:也许你是对的。我想我以前用过这个,但我现在没有代码来检查它。
    【解决方案2】:

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

    【讨论】:

    • 这是在 OpenGL 中,不是 UIKit。
    【解决方案3】:

    发生这种情况的一种方法是,如果您没有正确设置 glTexParameteri 以正确设置缩小和放大过滤器以及钳位方法。请参阅 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多