cocos2dx 修改亮度、对比度、色调、饱和度
废话少说,直接修改CCSprite使用的片面着色器ccShader_PositionTextureColor_noMVP.frag:
/*
* cocos2d for iPhone: http://www.cocos2d-iphone.org
*
* Copyright (c) 2011 Ricardo Quesada
* Copyright (c) 2012 Zynga Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
const char* ccPositionTextureColor_noMVP_frag = R"(
#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform float u_hue;
uniform float u_saturation;
uniform float u_brightness;
uniform float u_contrast;
vec3 rgbtohsv(vec3 rgb)
{
float R = rgb.x;
float G = rgb.y;
float B = rgb.z;
vec3 hsv;
float max1 = max(R, max(G, B));
float min1 = min(R, min(G, B));
if (R == max1)
{
if(max1 == min1)
{
hsv.x = 0.0;
}
else
{
hsv.x = (G - B) / (max1 - min1);
}
}
if (G == max1)
{
if(max1 == min1)
{
hsv.x = 2.0;
}
else
{
hsv.x = 2.0 + (B - R) / (max1 - min1);
}
}
if (B == max1)
{
if(max1 == min1)
{
hsv.x = 4.0;
}
else
{
hsv.x = 4.0 + (R - G) / (max1 - min1);
}
}
hsv.x = hsv.x * 60.0;
if (hsv.x < 0.0)
{
hsv.x = hsv.x + 360.0;
}
hsv.z = max1;
if(max1 == 0.0)
{
hsv.y = 0.0;
}
else
{
hsv.y = (max1 - min1) / max1;
}
return hsv;
}
vec3 hsvtorgb(vec3 hsv)
{
float R;
float G;
float B;
if (hsv.y == 0.0)
{
R = G = B = hsv.z;
}
else
{
hsv.x = hsv.x / 60.0;
int i = int(hsv.x);
float f = hsv.x - float(i);
float a = hsv.z * (1.0 - hsv.y);
float b = hsv.z * (1.0 - hsv.y * f);
float c = hsv.z * (1.0 - hsv.y * (1.0 - f));
if (i == 0)
{
R = hsv.z;
G = c;
B = a;
}
else if (i == 1)
{
R = b;
G = hsv.z;
B = a;
}
else if (i == 2)
{
R = a;
G = hsv.z;
B = c;
}
else if (i == 3)
{
R = a;
G = b;
B = hsv.z;
}
else if (i == 4)
{
R = c;
G = a;
B = hsv.z;
}
else
{
R = hsv.z;
G = a;
B = b;
}
}
return vec3(R, G, B);
}
void main()
{
vec4 pixColor = texture2D(CC_Texture0, v_texCoord);
vec3 hsv;
hsv.xyz = rgbtohsv(pixColor.xyz);
hsv.x += u_hue;
hsv.x = mod(hsv.x, 360.0);
hsv.y *= u_saturation;
hsv.z *= u_brightness;
vec3 f_color = hsvtorgb(hsv);
f_color = ((f_color - 0.5) * max(u_contrast + 1.0, 0.0)) + 0.5;
gl_FragColor = v_fragmentColor * vec4(f_color, pixColor.a);
}
)";
u_hue : 色调H, 范围[0 ~ 1], 默认0
u_saturation : 饱和度 [0 ~ 2], 默认1
u_brightness : 亮度 [0 ~ 2], 默认1
u_contrast : 对比度 [0 ~ 2], 默认0 初始化该着色器需要设置饱和度和亮度:
GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP)->setUniformFloat("u_saturation", );
GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP)->setUniformFloat("u_brightness", );
转载请注明出处,from 博客园 HemJohn
cocos2dx 修改亮度、对比度、色调、饱和度的更多相关文章
- 7. 进行图片的数据补全和增强(随机亮度,随机饱和度,随机翻转) Image.open(进行图片的读入) 2.ImageEnhance.Brightness(亮度变化) 3.ImageEnhance.Contrast(饱和度变化) 4.enhance_image.transpose(图片随机翻转) 5.enhance_image.save(进行图片保存)
1.Image.open(image_path) 进行图片的打开 参数说明:image_path 表示图片的路径 2. ImageEnhance.Brightness(image) # 进行图片的 ...
- [ActionScript 3.0] 亮度、对比度、饱和度、色相的调整
import fl.motion.ColorMatrix; import flash.filters.ColorMatrixFilter; //**调整亮度**// var ld_Matrix:Col ...
- android图像处理系列之三--图片色调饱和度、色相、亮度处理
原图: 处理后: 下面贴代码: 一.图片处理层: package com.jacp.tone.view; import java.util.ArrayList; import android.cont ...
- android图像处理系列之三-- 图片色调饱和度、色相、亮度处理
原图: 处理后: 下面贴代码: 一.图片处理层: package com.jacp.tone.view; import java.util.ArrayList; import android.cont ...
- OpenCV——ROI截取、线性混合、通道分离、合并、亮度对比度调整
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- C# vb .net实现饱和度调整特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的饱和度调整呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...
- C# vb .net实现色调调整特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的色调调整呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- C# vb .net实现对比度调整特效滤镜效果
在.net中,如何简单快捷地实现Photoshop滤镜组中的对比度效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...
- MPlayer
名称 mplayer − 电影播放器 mencoder − 电影编解码器 概要 mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...
随机推荐
- [转]jQuery Mobile动态刷新页面样式
本文转自:http://blog.csdn.net/zht666/article/details/8560765 当我们使用Ajax或者javascript动态在页面上添加元素后,如添加select控 ...
- (转)python 列表与元组的操作简介
python 列表与元组的操作简介 原文:https://www.cnblogs.com/QG-whz/p/4782809.html 阅读目录 列表 list函数 列表的基本操作 列表方法 元组 tu ...
- OneDrive撸5T硬盘空间教程
注意:要注册多个账户获取网盘的,用无痕模式打开临时教育邮箱网址.打开之后不要关闭,等会用来接收验证码. 1.需要office 365注册这时候需要教育邮箱: 临时教育邮箱:http://sysu.ed ...
- 高精度运算——java
java大法 java的框架. import java.io.*; import java.util.*; import java.math.*; public class Main{ public ...
- Python四大神兽(迭代器&生成器&闭包&装饰器)
一.迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不 ...
- StreamReader类
StreamReader类用于从文件中读取数据,该类是一个通用类,可用于任何流,构造方法和StreamWrite类格式一样的. 创建方式有两种: 1.先创建Filestream类在创建StreamRe ...
- golang and mogodb
1.golang的mogodb包下载:http://gopkg.in/mgo.v2 http://gopkg.in/mgo.v2/bson 2.golang的mongodb操作(mgo):htt ...
- 粗看ES6之数组
标签: javascript es6 数组新增方法 map(可以理解为是映射,以一定规则修改数组每一项并返回全新数组) reduce(可以理解为是汇总,一堆出来一个) filter(可以理解为过滤,筛 ...
- XHML教会我的一些东西-5
这是写好之后的主页代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- jQuery 显示与隐藏 tab选项卡
方法一:使用display样式:block.none来控制文本的显示与隐藏 <div class="explain_text"> 移动互联网为企业提供了连接用户的新方式 ...