簡體   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