ios – OpenGL减法混合

ios – OpenGL减法混合,第1张

概述在我正在开发的绘画应用程序中,我希望我的用户能够使用透明画笔绘制,例如在白色背景上的黑色涂料应该导致灰色.当涂抹更多涂料时,产生的颜色将更接近黑色. 然而,无论我在这个地方画多少次,最终的颜色都不会变黑;实际上它在几行后就停止了变化. Photoshop说OpenGL中左边绘制的blob的alpha值最大为0.8,我希望它为1. 我的应用程序通过绘制系列邮票,如Apple的GLPaint样本中形成 在我正在开发的绘画应用程序中,我希望我的用户能够使用透明画笔绘制,例如在白色背景上的黑色涂料应该导致灰色.当涂抹更多涂料时,产生的颜色将更接近黑色.

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

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

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

总结

以上是内存溢出为你收集整理的ios – OpenGL减法混合全部内容,希望文章能够帮你解决ios – OpenGL减法混合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存