我正在实现渲染器,其中阴影需要从前到后的渲染。我在解决如何初始化混合函数时遇到问题。Opengl前后混合问题(黑屏)
这是我的尝试。
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");
你是否要求你的帧缓冲器有一个alpha组件,并检查你是否真的得到了它? –
嘿,我没有做任何更多的初始化比我放在那里的代码。我只是直接渲染到默认帧缓冲区 – Jens
您使用什么框架/工具箱来设置您的上下文和窗口?默认帧缓冲区的格式是在初始设置过程中指定的。细节高度依赖平台/工具包/框架。 –