QT+OPenGL二十Gamma校正

为什么需要Gamma(伽马)校正

因为肉眼对于亮度的感知是非线性的,即对较暗的亮度感知灵敏,对于较亮的亮度感知度逐渐降低,当亮度达到一定值人眼才会感觉到有变化。而当年的CRT(阴极射线管显示器)与电压的对应关系恰好和肉眼相似。也就是说显示出来的图像亮度也是非线性的。如今的显示器依旧保留了这个特点。而自然界的亮度又是线性的,即光的粒子越多越亮。自然中的线性亮度输入到屏幕上就变暗了,原因在于肉眼基于自然亮度会进行非线性处理进行感知,而显示器在给显示给肉眼前也进行了一次非线性处理,这就是变暗的原因,这也是需要校正的原因之一,需要消除这一次非线性处理。

image.png

然而显示器上的亮度需要进行调整的,而我们只能进行线性的调整操作,这也会导致
问题出现:


image.png

当把正比的虚线(线性自然亮度)亮度0.5调整到1.0时,感知的亮度实际上是从0.2181.0。很显然不对这导致了肉眼感知的亮度跨越了4.5倍,而实际上我们只想让他提升2倍。即自然亮度的2.2次方才是显示的亮度值。这样直接显示当前亮度也会导致0.5的暗红色输入到显示屏上变成0.218超级暗红,接近黑色了都。

解决:

为了解决这个问题就把自然亮度进行1/2.2次方再进行显示即(线性亮度值)的1/2.2次方再2.2次方。输入0.5屏幕上显示的还是0.5,这样就保证了屏幕上显示的是我们期望的亮度,且调整倍数也是我们期望的倍数。这种原理就是gamma校正。

需要校正的内容:

通常纹理都是在sRGB或者GL_SRGB_ALPHA标准下定义的,这个标准是已经gamma校正过的(1/2.2次方化),而少部分像specular贴图和法线贴图几乎都在线性空间中定义的,因为要获取光照参数,如果校正就会出错,因此只能部分校正,否则会导致两次校正使亮度过亮。也就是只对在非线性空间定义的纹理和应用程序中定义的颜色进行校正(漫反射贴图)。但这不好统一校正,为了能简单的进行统一校正就能得到正确的结果,可以把在sRGB或者GL_SRGB_ALPHA标准下定义的纹理进行线性化处理(重校)。

方法:

一、可以在着色器中通过如下代码重校,即纹理采样时重校。这种方法的麻烦之处就是如果有多个shader会增加工作量。

这里我还没学法线贴图因此没管,等以后学了加上就行了。
shader中

float gamma = 2.2;
vec3 diffuseColor = pow(texture(diffuse, texCoords).rgb, vec3(gamma));

二、创建纹理时处理,在参数2处写成sRGB或者GL_SRGB_ALPHA。当然之前判断一下如果不是镜面反射贴图或者法线贴图就进行如下重校设置。
shader中

glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

这里我是用的是第二种方法。

效果:

校准前(所有颜色数据都是线性的)


image.png

校准后:


image.png

目录

VSC++2019+QT+OpenGL
QT+OpenGL一之绘制立方体(三角形图元)
QT+OpenGL二之纹理贴图
QT+OpenGL三之矩阵简解
QT+OpenGL四之相机的移动和旋转
QT+OpenGL五之绘制不同的模型(vao,vbo机制)
QT+OpenGL六之天空盒
QT+OpenGL七之使用EBO
QT+OPenGL八之模型准备
QT+OPenGL九之模型解码
QT+OPenGL十之光照模型
QT+OPenGL十一之漫反射和镜面反射贴图
QT+OPenGL十二之定向光
QT+OPenGL十三之真正的点光源和聚光灯
QT+OPenGL十四之多光源混合的问题
QT+OPenGL十五之深度缓冲区
QT+OPenGL十六之模板缓冲区
QT+OPenGL十七帧缓冲区(离屏渲染)
QT+OPenGL十八抗锯齿
QT+OPenGL十九镜面反射效率调整
QT+OPenGL二十Gamma校正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容