【问题标题】:Colors not blending properly in OpenGL ES颜色在 OpenGL ES 中没有正确混合
【发布时间】:2012-08-05 16:30:54
【问题描述】:

我正在尝试在 OpenGL ES 中以 2D 形式渲染 2 个(浅色)圆圈。中间为白色,边框为黑色。只要它们不重叠,它就可以正常工作:

但只要他们这样做,我就会得到这个神器:

我使用glBlendFunc(GL_ONE, GL_ONE) 当然启用了混合。

这可能是什么原因造成的?有办法解决吗?

我希望它们更像这样混合:

谢谢!

【问题讨论】:

    标签: ios opengl-es opengl-es-2.0


    【解决方案1】:

    您的圈子目前是线性渐变吗?如果你有不同的曲线,你可能会得到更少的伪影。

    不过,根据您的示例,您似乎想要两个圆圈的最大强度,而不是强度的总和。 Apple 的 OpenGL ES 2.0 实现似乎支持 EXT_blend_minmax 扩展,它允许您指定生成的片段值应该是入站值和现有值的最大值。可以试试吗?

    【讨论】:

    • 是的,我使用的是线性渐变。我会尝试不同的。
    • @DrummerB 我添加了另一个建议;事实证明,最大值是可能的,至少有一个扩展。
    【解决方案2】:

    您看到的结果正是线性渐变的结果。提示:打开 Photoshop 或 GIMP 将两个径向渐变绘制成两层并将它们设置为“加法”混合模式。它看起来和你的照片一模一样。

    方形渐变可以提供您想要的效果。如果您的渐变在 0…1 范围内,则取该值的平方并绘制它。如果您想线性化单个渐变,您可以稍后应用 sqrt。

    并不是说这不是使用混合阶段不容易完成的事情;它可以使用多次传递来完成,但实际上使用着色器来组合来自两个 FBO 的传递更直接。

    【讨论】:

      猜你喜欢
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多