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