在OpenGL中调整整个场景的亮度/灰度系数

时间:2008-09-26 12:07:01

标签: opengl 3d gamma

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

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

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

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

http://www.gamedev.net/community/forums/topic.asp?topic_id=435400可能是您问题的答案,否则您可能会将伽马校正实现为像素着色器