gpt4 book ai didi

ios - OpenGL 减法混合

转载 作者:可可西里 更新时间:2023-11-01 06:09:48 25 4
gpt4 key购买 nike

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

enter image description here

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

2013 年 2 月 12 日更新我尝试将 Apple 的 GLPaint 程序修改为,结果发现这种行为仅在 iOS7 上可见。从下面的截图中可以看出,iOS 7 上的颜色有点苍白,并且不能很好地融合。

GL_ONE, GL_ONE_MINUS_SRC_ALPHA

混合功能在 iOS6 上运行良好。此行为可能是由 iOS7 的 CALAyer 实现或其他原因引起的吗?我该如何解决?

iOS6 iOS7

2014 年 10 月 7 日更新

Apple 最近更新了适用于 iOS7 的 GLPaint 示例,该问题也很明显。我根据他们的代码创建了一个单独的线程:Unmodified iOS7 Apple GLPaint example blending issue

最佳答案

仅仅因为您的画笔确实使图像“变暗”并不意味着这是减色混合。这是面对常规的加法混合,黑色画笔只是 overdraw 图片。您需要一个 (GL_ONE, GL_ONE_MINUS_SRC_ALPHA) 混合函数(不分离)。画笔仅包含在纹理的 alpha channel 中,纹理中没有颜色 channel ,画笔颜色由 glColor 或等效的 uniform 确定。

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

关于ios - OpenGL 减法混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com