Thursday, April 28, 2011

How do I set the opacity of a vertex in OpenGL?

The following snippet draws a gray square.

glColor3b(50, 50, 50);

glBegin(GL_QUADS);
glVertex3f(-1.0, +1.0, 0.0); // top left
glVertex3f(-1.0, -1.0, 0.0); // bottom left
glVertex3f(+1.0, -1.0, 0.0); // bottom right
glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();

In my application, behind this single square exists a colored cube.

What function should I use to make square (and only this square) opaque?

From stackoverflow
  • glColor4f(float r,float g, float b, flaot alpha);
    (in your case maybe clColor4b)
    also make sure, that blending is enabled.
    (you have to reset the color to non-alpha afterwads, which might involve a glGet* to save the old vertexcolor)

  • Use glColor4 instead of glColor3. For example:

    glBlendFunc(GL_SRC_ALPHA,GL_ONE);
    glColor4f(1.0f,1.0f,1.0f,0.5f);
    
    nbolton : Thanks. Hmm, doesn't seem to be working for me, what could I be doing wrong?
  • You can set colors per vertex

    glBegin(GL_QUADS);
    glColor4f(1.0, 0.0, 0.0, 0.5); // red, 50% alpha
    glVertex3f(-1.0, +1.0, 0.0); // top left
    // Make sure to set the color back since the color state persists
    glVertex3f(-1.0, -1.0, 0.0); // bottom left
    glVertex3f(+1.0, -1.0, 0.0); // bottom right
    glVertex3f(+1.0, +1.0, 0.0); // top right
    glEnd();
    
  • In the init function, use these two lines:

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    

    And in your render function, ensure that glColor4f is used instead of glColor3f, and set the 4th argument to the level of opacity required.

    glColor4f(1.0, 1.0, 1.0, 0.5);
    
    glBegin(GL_QUADS);
    glVertex3f(-1.0, +1.0, 0.0); // top left
    glVertex3f(-1.0, -1.0, 0.0); // bottom left
    glVertex3f(+1.0, -1.0, 0.0); // bottom right
    glVertex3f(+1.0, +1.0, 0.0); // top right
    glEnd();
    

0 comments:

Post a Comment