1

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

在此处输入图像描述

谢谢!

4

2 回答 2

1

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

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

于 2012-08-05T16:59:52.080 回答
0

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

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

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

于 2012-08-05T17:28:04.477 回答