2012-08-05 56 views
1

我想在2D中在OpenGL ES中呈现2(光)圆。中间是白色的,边框是黑色的。它工作正常,只要它们不重叠:颜色在OpenGL ES中不能正确混合

enter image description here

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

enter image description here

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

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

我希望他们融入更多像这样的:

enter image description here

谢谢!

回答

1

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

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

+0

是的,我正在使用线性渐变。我会尝试不同的。 – DrummerB 2012-08-05 17:12:17

+0

@DrummerB我又增加了一个建议;结果是最大可能的,至少有一个扩展。 – 2012-08-05 17:27:50

0

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

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

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