第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光

第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光

第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标
第二章 OpenGL ES 基础-GLSL语法简单总结
第三章 OpenGL ES 基础-GLSL渲染纹理
第四章 OpenGL ES 基础-位移、缩放、旋转原理
第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵
第六章 OpenGL ES 基础-FBO、VBO理解与运用
第七章 OpenGL ES 基础-输入输出框架思维
第八章 OpenGL ES 基础-MVP矩阵理解
第九章 OpenGL ES 基础-高斯模糊原理
第十章 OpenGL ES 基础-图像USM锐化
第十一章 OpenGL ES 基础-基础光照
第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光
第十三章 OpenGL ES-RGB、HSV、HSL模型介绍

图片颜色特性和概念

  • 色温 :图片的色温指的是图片中呈现出来的整体颜色偏暖或偏冷的程度。较高的色温会使图像看起来更加蓝色,而较低的色温则倾向于呈现更多的黄色和橙色。色温可以影响图像的氛围和情感表达。简单理解是色彩的温度,越低越冷如蓝色,约高越暖如红色。

  • 色调 :色调是指图片色彩的整体质感,包括主要色调的选择和组合。通过调整色调,可以改变图像的整体色彩效果,营造特定的视觉风格或情绪。可以简单理解为色彩倾向,倾向于红橙还是黄绿。

  • 亮度 :亮度描述了图片中各个部分的明暗程度。增加亮度将使整体图像看起来更明亮,减小亮度则会使图像变得更暗。亮度的调整可以影响图像的整体视觉效果和光线感。增加就是给图片所有色彩加白色,减少加黑色。注意是只加黑白两种颜色,不然容易跟纯度弄混。

  • 对比度 :对比度是描述图像中不同区域之间亮度差异的程度。提高对比度会使图像中的明暗部分更加突出,增强图像的清晰度和视觉冲击力。适当的对比度可以让图像更具有立体感和层次感。增加就是让白的更白,黑的更黑;减少就是白的不那么白,黑的不那么黑。

  • 饱和度 :饱和度表示图片中颜色的纯度和鲜艳程度。增加饱和度会使颜色更加丰富饱满,减少饱和度则会使颜色变得更加灰暗。调整饱和度可以改变图像的整体色彩效果和视觉吸引力。就是增加图片各种颜色的纯度。比如蓝色,增加纯度就是在蓝色上加蓝色,降低纯度就是加入蓝色的对比色,让它变灰色或者黑色。

  • 高光 :高光是指图片中最亮的部分,通常是在光线照射下产生的明亮区域。调整高光可以改变图像中亮部的强度和反射效果,从而影响图像的细节和光影效果。增加就是给图片白色的部分再加点白色,减少就是减少点白色。

色温、色调、亮度、对比度、饱和度、高光对应GLSL函数处理

色温

c 复制代码
// 用于调整色温的函数,参数temp色温[-1.0, 1.0],暖色和冷色(蓝色)之前调整,只调整其中一种
vec3 adjustTemperature(vec3 color, float temp) {
   const vec3 warmFilter = vec3(0.93, 0.54, 0.0); // 设置黄色
   const vec3 coolFilter = vec3(0.0, 0.0, 0.3); // 设置蓝色
   // 根据温度值混合
   color = mix(color, color + warmFilter, max(temp, 0.0));
   color = mix(color, color + coolFilter, max(-temp, 0.0));
   return color;
}

色调

Hue旋转来调整色相,来调整色调

c 复制代码
// 色调函数,hue色调[-1.0, 1.0]
vec3 adjustTint(vec3 color, float hue) {
    float angle = hue * 3.14159265; // 将 -1 到 1 映射到 -PI 到 PI
    float c = cos(angle);
    float s = sin(angle);
    mat3 hueRotateMat = mat3(
        0.299, 0.587, 0.114,
        0.299, 0.587, 0.114,
        0.299, 0.587, 0.114
    ) + mat3(
        0.701 * c - 0.587 * s, -0.299 * c - 0.587 * s, -0.3 * c + 0.413 * s,
        0.168 * c + 0.330 * s, 0.325 * c - 0.5 * s, -0.322 * c - 0.094 * s,
        0.0 * c + 0.035 * s, -0.5 * c - 0.418 * s, 0.5 * c + 0.081 * s
    );
    return color * hueRotateMat;
}

亮度

c 复制代码
// 亮度函数,bright亮度[-1.0, 1.0]
vec3 adjustBrightness(vec3 color, float bright) {
    return color + vec3(bright);
}

对比度

c 复制代码
// 对比度函数,cont对比度[-1.0, 1.0]
vec3 adjustContrast(vec3 color, float cont) {
    cont += 1.0;
    return ((color - 0.5) * cont + 0.5);
}

adjustContrast函数使用一个简单的公式来调节对比度。让我们来解释一下这个公式:

cont += 1.0;:这里将输入的对比度值增加1,这样做可能是为了使cont的范围更适合计算。

return ((color - 0.5) * cont + 0.5);:在这行代码中,首先将颜色值减去0.5(这会将颜色值移到-0.5, 0.5范围内),然后乘以对比度因子cont(通常是大于1的值,用于增加对比度),最后再加上0.5,以便将值重新映射回0, 1范围内。

饱和度

c 复制代码
// 饱和度函数,sat饱和度[-1.0, 1.0]
vec3 adjustSaturation(vec3 color, float sat) {
    float luminance = dot(color, vec3(0.2126, 0.7152, 0.0722));
    vec3 grey = vec3(luminance);
    return mix(grey, color, sat + 1.0);
}

这个函数是用来调整颜色的饱和度的。下面是函数的说明:

  • vec3 adjustSaturation(vec3 color, float sat): 这是函数的声明,它接受一个vec3类型的颜色向量和一个浮点数sat作为输入参数。

  • float luminance = dot(color, vec3(0.2126, 0.7152, 0.0722));: 首先通过将输入颜色向量与一个包含亮度值的权重向量相乘,计算该颜色的亮度。dot 函数是计算两个向量的点积。在这里,它用于计算 color 向量与 (0.2126, 0.7152, 0.0722) 向量的点积。具体来说,它将 color 中的 R、G、B 分量与给定的权重值(对应不同颜色通道的亮度)相乘,并将这些乘积相加,从而得到一个单一的值作为光照强度。

  • vec3 grey = vec3(luminance);: 创建一个灰度向量,其三个分量均为之前计算得到的亮度值。

  • return mix(grey, color, sat + 1.0);: 使用mix函数基于饱和度的调整,在灰度和原始颜色之间进行混合。sat参数控制饱和度的变化,当sat为0时,返回完全灰度的颜色,当sat为1时,返回原始

高光

c 复制代码
// 高光函数,highlightStrengh高光[0.0, 1.0]
vec3 adjustHighlight(vec3 color, float highlightStrengh) {
    return min(color + vec3(highlightStrengh), vec3(1.0));
}
相关推荐
扶尔魔ocy9 小时前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg
:mnong2 天前
Web 三维可视化技术对比:ParaView Web vs 本项目 wasm + Three.js
前端·webgl·opengl·opencl·科学可视化
扶尔魔ocy3 天前
【qt openGL入门笔记】OSG实现显示飞机模型飞行的点迹(二)
qt·opengl·osg
扶尔魔ocy3 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行(三)
opengl·osg
扶尔魔ocy4 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行
qt·opengl·osg
扶尔魔ocy8 天前
【qt openGL入门笔记】FPS相机
qt·opengl
扶尔魔ocy8 天前
qt openGL入门笔记】FPS相机和轨道相机
qt·opengl
扶尔魔ocy10 天前
【qt openGL入门笔记】基础光照
qt·opengl
扶尔魔ocy10 天前
【qt openGL入门笔记】坐标系统和摄像机
qt·opengl
茉莉玫瑰花茶13 天前
OpenGL [ 纹理 ]
开发语言·c++·opengl