在我正在开发的绘画应用程序中,我希望我的用户能够使用透明画笔绘制,例如在白色背景上的黑色涂料应该导致灰色。当涂抹更多涂料时,产生的颜色将更接近黑色。
然而无论我在这个地方画多少次,最终的颜色都不会变黑;实际上它在几行后就停止了变化。 Photoshop说在OpenGL左边绘制的blob的alpha值最大为0.8,我希望它为1.
我的应用程序的工作原理是绘制一系列邮票,就像在Apple的GLPaint样本中一样,形成一条线。邮票与以下功能混合:
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
我的片段着色器:
uniform lowp sampler2D u_texture;
varying highp vec4 f_color;
void main(){
gl_FragColor = texture2D(u_texture, gl_PointCoord).aaaa*f_color*vec4(f_color.aaa, 1);
}
在重复绘制时,如何配置混合以获得全彩色?
2013年7月11日更新
也许我还应该注意,我首先绘制一个纹理,然后在屏幕上绘制纹理。使用以下代码生成纹理:
glGenFramebuffers(1, &textureFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, textureFramebuffer);
glGenTextures(1, &drawingTexture);
glBindTexture(GL_TEXTURE_2D, drawingTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelWidth, pixelHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
更新02/12/2013 我尝试修改Apple的GLPaint程序,结果发现这种行为只能在iOS7上观察到。正如在下面的屏幕截图中可以看到的那样,iOS 7上的颜色有点苍白,并且不能很好地融合。
GL_ONE, GL_ONE_MINUS_SRC_ALPHA
混合功能在iOS6上运行良好。这种行为可能是由iOS7的CALAyer或其他东西的实现引起的,我该如何解决呢?
2014年10月7日更新
Apple最近为iOS7更新了他们的GLPaint样本,这个问题也在那里可以观察到。我基于他们的代码创建了一个单独的线程:Unmodified iOS7 Apple GLPaint example blending issue
答案 0 :(得分:1)
仅仅因为你的画笔“变暗”图像并不意味着,这是减色混合。这是面对常规的添加剂混合,其中黑色画笔仅仅是过度绘制图片。您需要(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
混合功能(非分离)。画笔仅包含在纹理的Alpha通道内,纹理中没有颜色通道,画笔颜色由glColor
或等效的制服确定。
在大多数情况下,不需要使用目标alpha值。