在OpenGL中调整整个场景的亮度/gamma

在OpenGL中调整整个场景的亮度/gamma,opengl,3d,gamma,Opengl,3d,Gamma,有谁知道我如何在OpenGL中实现以下效果: 更改渲染场景的亮度 或者在OpenGL中实现Gamma设置 我曾尝试更改灯光的环境参数和灯光类型(定向和全向),但结果并不一致。蒂亚 感谢您的帮助,请提供一些其他信息: *我不能使用任何windows特定API。 *gamma设置不应影响整个窗口,因为我必须为不同的视图提供不同的gamma。可能是您问题的答案,否则您可能会将gamma校正作为像素着色器在win32上实现。您可以使用SetDeviceGammaRamp调整整体亮度/gamma。但是

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

  • 更改渲染场景的亮度
  • 或者在OpenGL中实现Gamma设置
我曾尝试更改灯光的环境参数和灯光类型(定向和全向),但结果并不一致。蒂亚

感谢您的帮助,请提供一些其他信息: *我不能使用任何windows特定API。
*gamma设置不应影响整个窗口,因为我必须为不同的视图提供不同的gamma。

可能是您问题的答案,否则您可能会将gamma校正作为像素着色器在win32上实现。您可以使用SetDeviceGammaRamp调整整体亮度/gamma。但是,这会影响整个显示,所以除非你的应用程序是全屏的,否则这不是一个好主意

可移植的替代方案是将整个场景绘制得更亮或更暗(这很麻烦),或者在整个场景上使用全屏alpha混合四元体,以根据需要使其变亮或变暗。这两种方法都不能影响伽马曲线,只能影响整体亮度;要调整gamma,需要将整个场景捕捉到纹理中,然后通过像素着色器将其渲染回屏幕,该着色器通过gamma函数运行每个纹理

好的,阅读了更新的问题,你需要的是一个四元混合设置,以加深或照亮它下面的一切。例如

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();

在某些情况下,这可能是GL_DST_颜色(例如,在ljwgl中),而不是GL_DEST_颜色