【发布时间】:2014-01-07 04:00:09
【问题描述】:
我试图通过绘制一个全屏黑色四边形来使我的显示器变暗,但只有 0.5 个 alpha。我渲染的第一帧,这可以正常工作,但是在第一帧之后我只得到一个黑屏。
正在进行大量渲染,但这里是所有相关的 openGL 调用(我认为):
初始化openGL(一次)
glClearColor(0, 0, 0, 1);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
渲染帧
glClear(GL_COLOR_BUFFER_BIT);
//render things normally (some colored rectangles)
glColor4f(0,0,0,.5);
//draw fullscreen quad
//flip buffers
我真的不确定这里可能出了什么问题。此外,如果我使用黑色以外的颜色,它会产生一个带有该颜色的图像,这(我认为)是应该发生的。我已经完成了对数学的理解,但我无法弄清楚黑色会如何出现,或者为什么它会因帧而异,所以我认为我必须错过 openGL 的其他一些方面,这会导致变化?
【问题讨论】:
-
只是一个猜测,但您的 glColor4f 是否有可能最终影响其他绘图?您并没有展示如何绘制想要变暗的内容,但如果它仅在第一帧有效,则可能是代码变暗影响帧的早期部分的副作用。所以 glColor4f 可能是罪魁祸首
-
啊!来自 glColor4f 的 alpha 继承了!该死的,我当时是个白痴。谢谢!
标签: opengl alphablending blending