在OpenGL中调整整个场景的亮度/伽玛
时间:2020-03-06 14:46:47 来源:igfitidea点击:
有谁知道我如何在OpenGL中实现以下效果:
- 更改渲染场景的亮度
- 或者在OpenGL中实现Gamma设置
我尝试通过更改光源的环境参数和光源类型(定向和全向)来进行尝试,但是结果并不均匀。 TIA。
感谢帮助,一些其他信息:
*我不能使用任何Windows特定API。
*灰度系数设置不应影响整个窗口,因为对于不同的视图,我必须具有不同的灰度系数。
解决方案
http://www.gamedev.net/community/forums/topic.asp?topic_id=435400可能是问题的答案,否则我们可以将gamma校正实现为像素着色器
在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();