在OpenGL中调整整个场景的亮度/伽马值

3
有谁知道如何在OpenGL中实现以下效果:
  • 改变渲染场景的亮度
  • 或者在OpenGL中实现Gamma设置
我已经尝试通过改变光源的环境参数和光源类型(定向光和全向光),但结果不均匀。谢谢您的帮助,以下是一些额外的信息: * 我不能使用任何Windows特定的API。 * Gamma设置不应影响整个窗口,因为我必须为不同的视图设置不同的Gamma值。
2个回答

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

在某些情况下,这可能是GL_DST_COLOR(例如在LJWGL中),而不是GL_DEST_COLOR。 - user1086498

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接