OpenGL3.3_C++_Windows(23)

伽ga马校正

  • 物理亮度 = 光子数量 
  • 线性空间:光子数(亮度)和颜色值的线性关系
  • 人眼感知的亮度:对比较暗的颜色变化更敏感,感知亮度基于人的感觉
  • 非线性空间:光子数(亮度)和 颜色值^2.2,
  • 恰好符合屏幕显示的CRT2.2(显示设备都有自己的Gamma值,设备输出亮度 = 电压的Gamma次幂)符合人眼规律,也就是屏幕自动的为我们更改符合人眼规律的亮度

注意:

  • 应用中配置的亮度和颜色是基于监视器所看到的,是非线性的配置
  • 也就是:我们把物体颜色值翻倍,将颜色值改变为【0.5——1】,可是在监视器中,我们看到的颜色变化其实是【0.25——1】,亮度翻了4.5倍以上
  • 通常将光照值设置得比本来更亮一些(由于监视器会将其亮度显示的更暗一些)

Gamma校正(最终颜色变回线性):

  • 在最终的颜色输出上应用监视器Gamma的倒数(1/2.2次幂),这样应用了监视器Gamma以后最终的颜色将会变为线性的
    • 方法一:
    • glEnable(GL_FRAMEBUFFER_SRGB);在颜色储存到颜色缓冲之前先校正sRGB颜色。包括默认帧缓冲。
    • 注意:如果你使用多个帧缓冲,应只将发送给监视器的最后的那个帧缓冲应用gamma校正。让两个帧缓冲之间传递的中间结果仍然保持线性空间颜色,
    • 方法二:
float gamma = 2.2;
fragColor.rgb = pow(fragColor.rgb, vec3(1.0/gamma));
    • 第二个方法有完全的控制权:很好了解决了上面多个帧缓冲的问题,但是同时有很多Fragment着色器的话,必须在像素着色器里加上这个gamma校正

gamma校正的问题:(针对外部引用的sRGB空间创作的资源)   

  • sRGB空间(Gamma == 2.2):创建或编辑的图片,是在非线性空间进行,比如将颜色翻倍,实际上是根据你所感知到的亮度进行的,并不等于将颜色值加倍。
  • 在我们没有应用gamma校正,没有问题的,纹理在sRGB空间创建和展示,同样我们还是在sRGB空间中使用,
  • 当应用gamma校正之后:纹理在sRGB空间创建和展示,在线性空间中使用,纹理图像会特别亮,
  • 原因是:基于sRGB空间中显示的更暗一些,纹理制作者设置的颜色值就比本来更亮,当将这个颜色值应用gamma校正之后,转变为线性空间,颜色会比没有应用gamma校正看到的更亮

解决:

  • 确保纹理制作者是在线性空间中进行创作的,这样颜色值是正确的,应用gamma校正之后,亮度也是相同的
  • 但是:大多数纹理制作者并不知道什么是gamma校正,另一个解决方案是重校:
  • 每个sRGB空间的纹理:在进行任何颜色值的计算前^2.2,变回监视器看到的颜色效果
  • 但是:为每个sRGB空间的纹理做这件事非常烦人。OpenGL给我们提供了另一个方案,glTexImage2D(),GL_SRGB和GL_SRGB_ALPHA内部纹理格式。

另一个不同之处是光照衰减

  • 物理公式:光照的衰减和光源的距离的平方成反比。
  • 二次函数:1.0 / (distance * distance);但是衰减效果总是过于强烈,光只能照亮一小圈,看起来并不真实
  • 双曲线方程:1.0 / distance;
  • 不用gamma校正的时候,双曲线比使用二次函数变体更真实,开启gamma校正以后,符合物理的二次函数突然出现了更好的效果
  • 不用gamma校正,为什么?双曲线比使用二次函数变体更真实?
  • 二次函数:(1.0/distance2)2.2将产生更强烈的衰减,双曲线1.0/distance2.2,和物理公式是很相似

Gamma校正作用:

  • 线性空间更符合物理世界,大多数物理公式现在都可以获得较好效果,
  • 应用中配置的亮度和颜色,在不同的显示设备上呈现一致的效果,正确的设置物理颜色值

Demo演示

非Gamma
Gamma

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么我学个 JAVA 就已经耗尽所有而有些人还能同时学习多门语言

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!我的入门语言是C&#xff0c…

互联网场景下人脸服务基线方案总结

1.简介 1.1目的 在过去的一段时间里,因为听见业务对人脸服务方案的需求,针对网络视频中关键人物定位的检索任务,完成了基于互联网场景的人脸基线服务的构建。本文档是对当前基线服务以后之后解决方案的优化进行总结。 1.2范围 本文档描述的人…

c++读取文件时出现中文乱码

原因:UTF-8格式不支持汉字编码 解决:改成ANSI,因为ANSI编码支持汉字编码

Python学习路线图(2024最新版)

这是我最开始学Python时的一套学习路线,从入门到上手。(不敢说精通,哈哈~) 一、Python基础知识、变量、数据类型 二、Python条件结构、循环结构 三、Python函数 四、字符串 五、列表与元组 六、字典与集合 最后再送给大家一套免费…

KVB App:中国制造业数据支撑澳元,分析师预计挑战0.6750阻力

摘要: 中国6月财新制造业PMI上升至51.8,反映出制造业生产经营活动的持续扩张。这一数据不仅高于预期,还为澳元提供了强有力的支撑。技术分析显示,澳元/美元可能会在短期内挑战0.6750阻力水平。 中国制造业数据解析 6月&#xff0…

python异常、模块与包

目录 了解异常异常的捕获方法python模块python包安装第三方包 了解异常 什么是异常 当检测到一个错误时,python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是我们常说的BUG bug单词的诞生 早期…

Python tkinter: 开发一个目标检测GUI小程序

程序提供了一个用户友好的界面,允许用户选择图片或文件夹,使用行人检测模型进行处理,并在GUI中显示检测结果。用户可以通过点击画布上的检测结果来获取更多信息,并使用键盘快捷键来浏览不同的图片。 一. 基本功能介绍 界面布局&am…

智芯开发板----时钟的使用

一、开发板时钟概述 介绍 Z20K11xM 的时钟结构,分布以及各个外设时钟源的选择。SCC 模块用于选择系统时钟,产生 core clock、bus clock 和 flash clock,分 别用于驱动 core 及高速外设、普通外设和 flash。PARCC 模块用于单独设置 每个外设的…

中霖教育怎么样?税务师通过率高吗?

中霖教育怎么样?税务师通过率高吗? 我们在税务师考试培训方面有着不错的成绩,这都是老师与学员共同努力的结果。 采用小班教学模式,确保每位学员都能得到足够的关注和指导,在学习过程中针对学员的薄弱环节进行专项突破。 因为大部分学员…

【C语言】常见的字符串函数

©作者:末央& ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨,书写未来之大梦 目录 strlen函数模拟实现 strstr子串查找函数模拟实现 strtok字符串分割 strlen函数 strlen函数是一个用于求字符串长度的库函数。它的参数是被求长度的字…

【爱上C++】详解string类2:模拟实现、深浅拷贝

在上一篇文章中我们介绍了string类的基本使用,本篇文章我们将讲解string类一些常用的模拟实现,其中有很多细小的知识点值得我们深入学习。Let’s go! 文章目录 类声明默认成员函数构造函数析构函数拷贝构造函数深浅拷贝问题传统写法现代写法…

泛型的使用(<T>)

文章目录 前言一、泛型是什么?二、泛型的使用 1.定义泛型类2.泛型的常规用法总结 前言 强制类型转换存在一定隐患,如数据丢失、内存溢出、运行时错误、程序逻辑错误等。所以提供了泛型机制,使程序员可以定义安全的数据类型进行操作。通俗的理…

CEPH 系统盘挂了,如何使用数据盘恢复

硬盘损坏是早晚的时,CEHP数据盘坏了,使用CEPH的基本都轻车熟路了,如果系统盘坏了呢?不知道的可能会采取整个系统盘全做的方式 前提条件:使用cephadm搭建集群 如果换服务器,请确保CEPH数据盘放到其它服务器上…

Python基础教程——一次搞懂 Python 字典!Python字典的20种神奇用法

Python 字典(Dictionary)是数据结构中的一种重要类型。它以键值对的形式存储数据,具有快速查找的特性。今天我们将通过生动有趣的案例,来探讨字典的20个经典操作,帮助大家深入理解和掌握这些概念。 1. 创建字典 字典…

Python从0到100(三十四):Python中的urllib模块使用指南

1. urllib模块概述 在Python中,除了广泛使用的requests模块之外,urllib模块也是处理HTTP请求的重要工具。urllib模块在Python 2中分为urllib和urllib2两个模块,而在Python 3中,它们被合并为一个urllib模块。本文将重点介绍Python…

【鸿蒙学习笔记】Column迭代完备

属性含义介绍 Column({ space: 10 }) {Row() {Text(文本描述).size({ width: 80%, height: 60 }).backgroundColor(Color.Red)}.width(90%).height(90).backgroundColor(Color.Yellow) } .width(100%) // 宽度 .height(200) // 高度 .backgroundColor(Color.Pink) // 背景色 .…

pcap包常见拆分方法

文章目录 Wireshark 拆分流量包SplitCap使用简介魔数报错示例结果 在进行流量分析时,经常需要分析pcap流量包。但是体积过大的流量包不容易直接分析,经常需要按照一定的规则把它拆分成小的数据包。 这里统一选择cic数据集里的Thursday-WorkingHours.pcap…

二、 操作系统知识(考点篇)

一、操作系统概述 操作系统定义: 能有效地组织和管理系统中的各种软/硬件资源,合理地组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。 操作系统有三个重要的作用: 第一&am…

【办公软件使用分享—Word篇】实用技巧 一学就会 沈阳电脑办公软件基础培训

在平时的工作学习中,Word真真是让很多人头疼的一件事,今天给大家分享20个案例,感受下Word真正的力量! 1.插入自动目录 没有目录的文档不是一份合格的文档,很多人认为在Word里插入目录是一件很麻烦的事,其…

Soul打造安全社交元宇宙环境,全力守护用户线上社交安全

在数字化时代的浪潮中,智能安全线上社交正成为人们日常生活中的重要组成部分。随着人们对社交媒体和在线平台依赖程度的不断增加,保障个人信息安全和网络安全变得至关重要。在此背景下,社交平台致力于采取多种措施来保障用户的隐私安全,提升社交体验的质量和安全性。而Soul全方…