繁体   English   中英

OpenGL减法混合

[英]OpenGL subtractive blending

在我正在开发的绘画应用程序中,我希望我的用户能够使用透明画笔绘制,例如在白色背景上的黑色涂料应该导致灰色。 当涂抹更多涂料时,产生的颜色将更接近黑色。

在此输入图像描述

然而,无论我在这个地方画多少次,最终的颜色都不会变黑; 实际上它在几行后就停止了变化。 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);
}

我应该如何配置混合以便在重复绘制时获得全彩色?

更新07/11/2013

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

    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或其他东西的实现引起的,我该如何解决?

iOS6的IOS 7

2014年10月7日更新

Apple最近为iOS7更新了他们的GLPaint样本,并且在那里也可以观察到这个问题。 我基于他们的代码创建了一个单独的线程: 未修改的iOS7 Apple GLPaint示例混合问题

仅仅因为你的画笔“变暗”图像并不意味着,这是减法混合。 这是面对常规的添加剂混合,其中黑色画笔仅仅是过度绘制图片。 您需要(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)混合功能(非分离)。 画笔仅包含在纹理的alpha通道内,纹理中没有颜色通道,画笔颜色由glColor或等效的均匀度决定。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM