6

以下代码段绘制了一个灰色正方形。

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

4 回答 4

14

在 init 函数中,使用这两行:

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

在您的渲染函数中,确保glColor4f使用 代替glColor3f,并将第四个参数设置为所需的不透明度级别。

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();
于 2009-04-06T15:10:54.557 回答
2

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

于 2009-04-06T14:31:08.240 回答
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();
于 2009-04-06T14:46:14.787 回答
1

使用glColor4而不是glColor3. 例如:

glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(1.0f,1.0f,1.0f,0.5f);
于 2009-04-06T14:32:45.290 回答