1.简介
色温:简单理解是色彩的温度,越低越冷如蓝色,约高越暖如红色。
亮度:增加就是给图片所有色彩加白色,减少加黑色。注意是只加黑白两种颜色,不然容易跟纯度弄混。
对比度:增加就是让白的更白,黑的更黑;减少就是白的不那么白,黑的不那么黑。
饱和度:就是增加图片各种颜色的纯度。比如蓝色,增加纯度就是在蓝色上加蓝色,降低纯度就是加入蓝色的对比色,让它变灰色或者黑色。
高光:增加就是给图片白色的部分再加点白色,减少就是减少点白色。
色调:可以简单理解为色彩倾向,倾向于红橙还是黄绿。
2.效果展示
3.片段着色器源码
#version 330 coreout vec4 FragColor;
uniform sampler2D ourTexture;in vec2 outTexCoord;uniform float temperature; //色温[-1.0, 1.0]
uniform float hue; //色调[-1.0, 1.0]
uniform float brightness; //亮度[-1.0, 1.0]
uniform float contrast; //对比度[-1,1]
uniform float saturation; //饱和度[-1.0, 1.0]
uniform float highlight; //高光[0.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(temperature, 0.0));color = mix(color, color + coolFilter, max(-temperature, 0.0));return color;
}// 色调函数
vec3 adjustTint(vec3 color, float hue) {float angle = hue * 3.14159265; // 将 -1 到 1 映射到 -PI 到 PIfloat 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;
}// 亮度函数
vec3 adjustBrightness(vec3 color, float bright) {return color + vec3(bright);
}// 对比度函数
vec3 adjustContrast(vec3 color, float cont) {cont += 1.0;return ((color - 0.5) * cont + 0.5);
}// 饱和度函数
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 adjustHighlight(vec3 color, float highlightStrengh) {return min(color + vec3(highlightStrengh), vec3(1.0));
}void main()
{vec3 color = texture(ourTexture, outTexCoord).rgb;// 应用各种调整color = adjustTemperature(color, temperature);color = adjustTint(color, hue);color = adjustBrightness(color, brightness);color = adjustContrast(color, contrast);color = adjustSaturation(color, saturation);color = adjustHighlight(color, highlight);FragColor = vec4(color,1.0f);
}
4.完整工程
https://download.csdn.net/download/wzz953200463/88908054
5.相关参考
1.OpenGL模型控制(旋转、平移)
2.OpenGL ES2加载3D模型
3.OpenGL Assimp加载各类型模型(.obj、.fbx、.glb、.3ds)