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