Opengl前后混合问题(黑屏)

时间:2015-10-31 01:03:29

标签: opengl draw alphablending

我实现了一个渲染器,其中着色需要从前到后渲染。我在确定如何初始化混合功能时遇到了问题。

这是我尝试过的。

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS); 
glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

这会导致黑屏。

The blog post说要使用GL_ONE_MINUS_DST_ALPHA,GL_ONE并将背景初始化为全黑的所有半透明,这就是我认为我正在做的事情。帖子引用an nvidia whitepaper所以我也调查了这一点。我查看了那里的代码,他们似乎和我一样。然而,事情显然是错误的,因为它不起作用。如果我不使用混合或使用其他混合功能,事情似乎有效。

修改

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("Window");

1 个答案:

答案 0 :(得分:1)

如果使用涉及目标alpha的混合,则需要在GLUT初始化期间专门请求Alpha平面。将通话更改为:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA);

您可能认为指定GL_RGBA就足够了。至少我做了,直到我刚检查了documentation,其中说:

  

请注意,GLUT_RGBA选择RGBA颜色模型,但它不会请求分配任何alpha位(有时称为alpha缓冲区或目标alpha)。要请求alpha,请指定GLUT_ALPHA。