如何在OpenGL中使用alpha透明度?

H-H*_*H-H 27 c++ opengl transparency alpha

这是我的代码:

void display(void);

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable( GL_BLEND );
    glutInitWindowSize(600,600);
    glutInitWindowPosition(200,50);
    glutCreateWindow("glut test");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPointSize(8);
    glBegin(GL_POINTS);
    glColor4f(.23,.78,.32,1.0);
    glVertex2f(0,0);
    glColor4f(.23,.78,.32,0.1);
    glVertex2f(0.1,0);
    glEnd();
    glFlush();
}
Run Code Online (Sandbox Code Playgroud)

问题是这两个点看起来是相同的(即使我将alpha设置为0).有没有我错过了启用alpha透明度?

Goz*_*Goz 61

你有glEnable'd alpha混合吗?你有没有设置你的混合参数?您不能只设置在OpenGL中设置各种其他参数所需的alpha.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable( GL_BLEND );
Run Code Online (Sandbox Code Playgroud)

  • 这对初学者真的很有帮助,谢谢〜 (6认同)

And*_*ith 18

只是一个猜测,但可能是你没有背景颜色?那么,当你渲染第二个具有alpha 0.1的顶点时,没有背景来计算正确的颜色?只是一个猜测,我使用opengl已经好几年了.

  • 是的,就是这样.我应该添加:`glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glClearColor(0.0,0.0,0.0,0.0);`但只能在glutCreateWindow()之后 (6认同)