有谁知道我如何在OpenGL中实现以下效果:


更改渲染场景的亮度
或者在OpenGL中实现Gamma设置


我尝试通过更改光源的环境参数和光源类型(定向和全向)来进行尝试,但是结果并不均匀。 TIA。

感谢您的帮助,一些其他信息:
*我不能使用任何Windows特定API。
*伽玛设置不应影响整个窗口,因为对于不同的视图,我必须具有不同的伽玛。

最佳答案

在win32上,您可以使用SetDeviceGammaRamp调整整体亮度/伽玛。但是,这会影响整个显示,因此除非您的应用为全屏模式,否则这不是一个好主意。

便携式的替代方法是将整个场景绘制得更亮或更暗(这很麻烦),或者在整个场景上拍一个全屏的alpha混合四边形以根据需要对其进行增亮或变暗。这两种方法都不会影响伽玛曲线,只会影响整体亮度。要调整灰度系数,您需要将整个场景捕获为纹理,然后通过像素着色器将其渲染回屏幕,该像素着色器通过灰度系数函数运行每个纹理像素。

好的,阅读了更新的问题后,您需要的是一个四边形,其混合设置可加深或增亮其下的所有内容。例如。

if( brightness > 1 )
{
    glBlendFunc( GL_DEST_COLOR, GL_ONE );
    glColor3f( brightness-1, brightness-1, brightness-1 );
}
else
{
    glBlendFunc( GL_ZERO, GL_SRC_COLOR );
    glColor3f( brightness, brightness, brightness );
}
glEnable( GL_BLEND );

draw_quad();

09-25 10:56