Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: glBlendFunc and glBlendFuncSeparate (white = alpha 0, black = alpha 1)

  1. #1
    Intern Newbie
    Join Date
    Jul 2012
    Posts
    41

    glBlendFunc and glBlendFuncSeparate (white = alpha 0, black = alpha 1)

    I need some help with OpenGL textures masking. I have it working but need to find some other blending function parameters to work in other way. Now I have

    Code :
    //Background 
    ...code...
        glBlendFunc(GL_ONE, GL_ZERO);
    ...code
     
    //Mask
    ...code...
        glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ZERO);
    ...code...
     
    //Foreground
    ...code
        glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
    ...code

    Now it sets foreground's opacity to 0 (fills with background texture) where mask is transparent. I need it to react to mask's colors. I mean something like setting foregrounds opacity depending on mask's color. For example if mask is black (0.0,0.0,0.0) then the opacity of that place in foreground is 0 (is filled with background), and if mask is white (1.0,1.0,1.0) then the opacity of foreground is 1 (not filled with background). It can be in reverse consequence (white = opacity 0, black = opacity 1). I just need it to work depending on color.

    Visualization:

    1. 1st column is my current result. Circle in mask is transparent.
    2. 2nd column is example of result I am trying to get. Circle in mask is white.
    3. 3rd column is example of why I want to get it working just like as I said (white mask color = foreground alpha 0, black mask color = foreground alpha 1 or reverse)
    1. 1st row is background
    2. 2nd row is mask
    3. 3rd row is foreground
    4. 4th row is result
    Last edited by hockeyman; 08-01-2012 at 04:59 AM.

  2. #2
    Intern Newbie
    Join Date
    Jul 2012
    Posts
    41
    I got some info that I should use shaders. And it was said to me that this code should help me out:

    Code :
    uniform sampler2D backTex,maskTex,foreText;
     
    void main()
    {
       float mask;
       vec4 result;
     
       mask = texture2D(maskTex,gl_TexCoord[0].st).r;
       result = texture2D(backTex,gl_TexCoord[0].st) * (1 - mask);
       result = result + texture2D(foreTex,gl_TexCoord[0].st) * mask;
     
       result.a = 1;
     
       gl_FragColor = result;
    }

    But I have no idea how to implement it to my code (objective-c)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •