我正在编写一个基于 PyOpenGL 的 UI 来手动对齐图像。我将我的两个图像显示为带纹理的四边形,在静态参考之上的移动图像。动态图像显示为红色,具有不同的 alpha,即glColor4f(1.,0.,0.,overlay_opacity)
,而静态图像显示为青色,不透明度等于 1,即glColor4f(0.,1.,1.,1.)
。然后用户可以overlay_opacity
通过鼠标滚动来改变移动图像和参考图像之间的渐变。
目前我正在使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
. 虽然这确实允许我在青色和红色图像之间平滑淡化,但这也意味着当overlay_opacity
等于 0.5 时,我只能获得红色和青色图像最大强度的一半,因此结果看起来暗淡而浑浊。如果我使用glBlendFunc(GL_SRC_ALPHA,GL_ONE)
我的青色图像,我总是会获得最大强度,所以我不能淡出它。我真正想要的是某种非线性混合,如下面的第三张图所示:
我想我也许可以在片段着色器中做到这一点,但似乎应该有一种更简单的方法来使用 just 来实现相同的结果glBlendFunc()
。我也试过GL_SRC_ALPHA_SATURATE
了,这在我的实现中似乎不起作用。