我正在尝试在 2D 中渲染 OpenGL ES 中的 2 个(浅色)圆圈。中间为白色,边框为黑色。只要它们不重叠,它就可以正常工作:
但是一旦他们这样做,我就会得到这个神器:
当然,我正在使用glBlendFunc(GL_ONE, GL_ONE)
启用混合。
这可能是什么原因造成的?有没有办法解决它?
我希望它们混合得更像这样:
谢谢!
我正在尝试在 2D 中渲染 OpenGL ES 中的 2 个(浅色)圆圈。中间为白色,边框为黑色。只要它们不重叠,它就可以正常工作:
但是一旦他们这样做,我就会得到这个神器:
当然,我正在使用glBlendFunc(GL_ONE, GL_ONE)
启用混合。
这可能是什么原因造成的?有没有办法解决它?
我希望它们混合得更像这样:
谢谢!
你的圈子目前是线性渐变吗?如果你有不同的曲线,你可能会得到更少的伪影。
但是,根据您的示例,您似乎想要两个圆圈的最大强度,而不是强度的总和。Apple 的 OpenGL ES 2.0 实现似乎支持EXT_blend_minmax扩展,它允许您指定生成的片段值应该是入站值和现有值的最大值。也许试试看?
您看到的结果正是线性渐变应该出现的结果。提示:打开 Photoshop 或 GIMP 将两个径向渐变绘制成两层并将它们设置为“添加”混合模式。它看起来和你的照片一模一样。
方形渐变可以提供您想要的效果。如果您的渐变在 0…1 范围内,则取该值的平方并绘制它。如果您想线性化单个渐变,您可以稍后应用 sqrt。
并不是说这是使用混合阶段不容易完成的事情;它可以使用多次传递来完成,但实际上使用着色器组合来自两个 FBO 的传递更直接。