Opengl 前后混合问题(黑屏)

Opengl front to back blending issue (black screen)

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

这是我试过的。

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 says to use GL_ONE_MINUS_DST_ALPHA, GL_ONE and initialize the background to all black all translucent, which is what I think I'm doing. The post cites an nvidia whitepaper 所以我也调查了一下。我查看了那里的代码,他们似乎和我做的有点一样。但是,有些事情显然是错误的,因为它不起作用。如果我不使用混合或使用其他混合功能,事情似乎会起作用。

编辑:

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

如果您使用涉及目标 alpha 的混合,则需要在 GLUT 初始化期间特别请求 alpha 平面。将调用更改为:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA);

您可能认为指定 GL_RGBA 就足够了。至少我做到了,直到我检查了 documentation,上面写着:

Note that GLUT_RGBA selects the RGBA color model, but it does not request any bits of alpha (sometimes called an alpha buffer or destination alpha) be allocated. To request alpha, specify GLUT_ALPHA.