在我正在开发的绘图应用程序中,我希望我的用户能够使用透明画笔进行绘制,例如白色背景上的黑色油漆应该会产生灰色。当应用更多的油漆时,产生的颜色将更接近黑色。
但是无论我在这个地方画了多少次,最终的颜色都不会变黑;事实上,它在几行之后就停止了变化。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 示例,并且在那里也可以观察到这个问题。我根据他们的代码创建了一个单独的线程:未修改的 iOS7 Apple GLPaint 示例混合问题