我实现了一个渲染器,其中着色需要从前到后渲染。我在确定如何初始化混合功能时遇到了问题。
这是我尝试过的。
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");
答案 0 :(得分:1)
如果使用涉及目标alpha的混合,则需要在GLUT初始化期间专门请求Alpha平面。将通话更改为:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA);
您可能认为指定GL_RGBA
就足够了。至少我做了,直到我刚检查了documentation,其中说:
请注意,GLUT_RGBA选择RGBA颜色模型,但它不会请求分配任何alpha位(有时称为alpha缓冲区或目标alpha)。要请求alpha,请指定GLUT_ALPHA。