如何在OpenGL中设置顶点的不透明度?

时间:2009-04-06 14:28:38

标签: c++ opengl transparency opacity

以下代码段绘制一个灰色方块。

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();

在我的应用程序中,这个单个方块后面有一个彩色立方体。

我应该使用什么函数来使正方形(并且只有这个正方形)不透明?

4 个答案:

答案 0 :(得分:10)

在init函数中,使用以下两行:

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

在渲染功能中,确保使用glColor4f代替glColor3f,并将第4个参数设置为所需的不透明度。

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();

答案 1 :(得分:2)

glColor4f(float r,float g,float b,flaot alpha);
(在你的情况下可能是clColor4b)
还要确保启用混合。
(你必须将颜色重置为非alpha后加工,这可能涉及glGet *以保存旧的顶点颜色)

答案 2 :(得分:2)

使用glColor4代替glColor3。例如:

glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(1.0f,1.0f,1.0f,0.5f);

答案 3 :(得分:2)

您可以设置每个顶点的颜色

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();