【发布时间】:2013-04-30 21:42:17
【问题描述】:
我正在编写一个基于 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),我总是会得到青色图像的最大强度,所以我不能淡出它。我真正想要的是某种非线性混合,如下图第三张所示:
我想我也许可以在片段着色器中执行此操作,但似乎应该有一种更简单的方法来仅使用 glBlendFunc() 来实现相同的结果。我也试过GL_SRC_ALPHA_SATURATE,这在我的实现中似乎不起作用。
【问题讨论】:
-
我只是硬着头皮做一个快速着色器。没有关于正在发生的事情的问题:)
-
@MichaelDorgan:您无法使用着色器控制混合。混合是即使在现代 GPU 中仍然被硬连线的事情之一。
标签: opengl alphablending blending pyopengl