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
glColor4instead ofglColor3. 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
glColor4fis used instead ofglColor3f, 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