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 [指定选项] [文件 ...
随机推荐
- 性能测试工具LoadRunner10-LR之Virtual User Generator 错误处理函数
VuGen提供了错误处理函数lr_continue_on_error,用来在脚本中实时修改Vuser的出错设置.lr_continue_on_error函数语法结构如下: void lr_contin ...
- vue-cli生成的重要代码详解
安装好vue-cli之后,我们可以在package.json中看到下面所示: { // 项目名称 "name": "myvue", // 项目版本 " ...
- ASP.NET中多语言的实现
一个网站可能具备多个语言,要实现这个功能在ASP.NET中是非常简单的.我们需要为项目添加资源文件文件夹,并且添加针对网站的特定的资源文件等即可.在ASP.NET中资源文件分成两类:全局和页面级(即“ ...
- http学习笔记(三):报文
三.报文 目录: 3.1方法 1.get 2.head 3.put 4.post 5.trace 6.options 7.delete 3.2状态码 ...
- PHP的htmlspecialchars、strip_tags、addslashes解释
第一个函数:strip_tags,去掉 HTML 及 PHP 的标记 注意:本函数可去掉字串中包含的任何 HTML 及 PHP 的标记字串.若是字串的 HTML 及 PHP 标签原来就有错,例如少了大 ...
- webpack-dev-server.js 服务器配置说明
connect-history-api-fallback 使用: var app = express() var histroy = require('connect-history-api-fall ...
- 【ArcGIS】文件地理数据库,个人地理数据库与ArcSDE的局别
地理数据库的类型 地理数据库是用于保存数据集集合的“容器”.有以下三种类型: 文件地理数据库 - 在文件系统中以文件夹形式存储.每个数据集都以文件形式保存,该文件大小最多可扩展至 1 TB.建议使 ...
- react-native —— 在Mac上搭建React Native Android开发环境
需要:JDK,Android SDK,Node.js 1.安装JDK 去Java官网下载列表选择Mac OS X x64版 2.安装Android SDK 虽然现在谷歌推荐使用Android ...
- 开源框架 epics,开源画面编辑软件 edm
epics Experimental Physics and Industrial Control System 一套开源软件框架,实验物理和工业控制系统 http://www.aps.anl.gov ...
- 22 Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...