【问题标题】:How to use alpha transparency in OpenGL?如何在 OpenGL 中使用 alpha 透明度?
【发布时间】:2010-12-09 16:43:15
【问题描述】:

这是我的代码:

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

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

【问题讨论】:

    标签: c++ opengl transparency alpha


    【解决方案1】:

    只是猜测,但可能是您没有背景颜色吗?那么,当您渲染具有 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() 之后
    【解决方案2】:

    你有 glEnable'd alpha blending 吗?你设置好混合参数了吗?您不能只设置 OpenGL 中设置各种其他参数所需的 alpha。

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

    【讨论】:

    • OpenGL 需要启用大部分功能。一个开始寻找的好地方。 (在不同的时间禁用和启用不同的操作会产生最有趣的效果。)
    • 谢谢,我加了,但是忘了设置背景色
    • 这对初学者真的很有帮助,谢谢~
    • 初始化顺序也很重要。似乎必须在设置 glEnable() 和 glBlendFunc() 之前初始化窗口。
    • @user3078414 需要创建上下文,但不能(严格来说)附加到窗口。 OpenGL 只关心上下文,就它而言,离屏的就可以了。
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多