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.
我正在实现一个渲染器,其中着色需要前后渲染。我在弄清楚如何初始化混合功能时遇到问题。
这是我试过的。
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.