Ios OpenGL减法混合

Ios OpenGL减法混合,ios,opengl-es,ios7,opengl-es-2.0,blending,Ios,Opengl Es,Ios7,Opengl Es 2.0,Blending,在我正在开发的一个绘画应用程序中,我希望我的用户能够使用透明画笔进行绘画,例如,白色背景上的黑色绘画应该会产生灰色。当使用更多的油漆时,产生的颜色将更接近黑色 然而,无论我在这个地方画多少遍,最终的颜色永远不会变黑;事实上,几行之后它就停止变化了。Photoshop说OpenGL中左边绘制的斑点的alpha最大值为0.8,我预计为1 我的应用程序的工作原理是画一系列的邮票,就像苹果的GLPaint样本一样,形成一条线。邮票与以下功能混合使用: glBlendFuncSeparate(GL_ON

在我正在开发的一个绘画应用程序中,我希望我的用户能够使用透明画笔进行绘画,例如,白色背景上的黑色绘画应该会产生灰色。当使用更多的油漆时,产生的颜色将更接近黑色

然而,无论我在这个地方画多少遍,最终的颜色永远不会变黑;事实上,几行之后它就停止变化了。Photoshop说OpenGL中左边绘制的斑点的alpha最大值为0.8,我预计为1

我的应用程序的工作原理是画一系列的邮票,就像苹果的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年11月7日

也许我还应该注意,我首先绘制纹理,然后在屏幕上绘制纹理。使用以下代码生成纹理:

    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);
更新日期2013年12月2日 我尝试将苹果的GLPaint程序修改为,结果发现这种行为只有在iOS7上才能观察到。从下面的屏幕截图可以看出,iOS 7上的颜色有点苍白,不能很好地混合。

GL_ONE, GL_ONE_MINUS_SRC_ALPHA
blend函数在iOS6上运行良好。这种行为是由iOS7的CALAyer实现还是其他什么引起的?我该如何解决它

更新日期2014年7月10日


苹果最近更新了iOS7的GLPaint样本,这个问题在那里也可以观察到。我根据他们的代码制作了一个单独的线程:

仅仅因为你的画笔使图像“变暗”,并不意味着这是减法混合。这是在脸的常规添加剂混合,其中黑色画笔只是透支的图片。您需要一个
(GL\u ONE,GL\u ONE\u减去\u SRC\u ALPHA)
混合函数(非分离)。画笔仅包含在纹理的alpha通道内,纹理中没有颜色通道,画笔颜色由
glColor
或等效的均匀颜色确定


在大多数情况下,不需要使用目标alpha值。

@Hristo:除了DatenWalf所讨论的内容之外,在数量惊人的情况下,甚至没有定义目标alpha位平面。你需要一个RGBA像素格式才能工作,因为在混合RGB格式后,A会被丢弃。在这种情况下,很难说目标alpha混合是否有效——这取决于上下文的像素格式。我按照DatenWalf的建议替换了混合函数,但我看不出有任何区别。“GL_ONE_减去_DST_ALPHA”是之前尝试使其工作时留下的:)您尝试过使用更高精度的采样器吗?如果我没有弄错的话,
mediump
是采样器制服的默认声明。@AndonM.Coleman我只是尝试了中高两种,没有效果。我想lowp对于这个应用程序来说已经足够了。这正是我看到的问题(或者非常类似)。您是否找到了解决方案或取得了任何进展?SktetchBookX for iPhone正是我想要的。不幸的是,我还没有找到任何解决方案。我很快会再次调查这个问题。我相信这是一件非常简单的事情,随着ios7的改变。同时,如果您有任何解决方案或建议,请告诉我。