在OpenGL ES中未正确混合的颜色

时间:2012-08-05 16:30:55

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

我正在尝试在2D中渲染OpenGL ES中的2个(光)圆。中间是白色,边框是黑色。它工作正常,只要它们不重叠:

enter image description here

但是一旦他们这样做,我就会得到这个神器:

enter image description here

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

可能导致这种情况的原因是什么?有办法解决吗?

我希望他们能更像这样:

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

像你想要的效果是用方形渐变给出的。如果渐变在0 ... 1范围内,则取值的平方并绘制此值。如果要线性化单个渐变,可以稍后应用sqrt。

并非使用混合阶段不容易做到这一点;它可以使用多次传递来完成,但实际上使用着色器组合传递来自两个FBO更直接。