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 TextBox Water Mark with asp.net
本文转自:http://naspinski.net/post/jQuery-TextBox-Water-Mark-with-aspnet.aspx I stole majority of this c ...
- Murano Weekly Meeting 2015.10.20
Meeting time: 2015.October.20th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting sum ...
- pat04-树9. Path in a Heap (25)
04-树9. Path in a Heap (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Insert ...
- Qt 串口连接
Qt 串口连接 使用 Qt 开发上位机程序时,经常需要用到串口,在 Qt 中访问串口比较简单,因为 Qt 已经提供了 QSerialPort 和 QSerialPortInfo 这两个类用于访问串口. ...
- Objective-C #define 用法解析 (转)
原文地址: http://blog.csdn.net/kindazrael/article/details/8108868 Objective-C : #define 用法解析 在 C 语言中,预处理 ...
- js获取url的参数和值的N种有效方法
js获取url的参数和值的N种有效方法 function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[" ...
- C++ Knowledge series 2
Programming language evolves always along with Compiler's evolvement The semantics of constructors O ...
- 海量数据去重之SimHash算法简介和应用
SimHash是什么 SimHash是Google在2007年发表的论文<Detecting Near-Duplicates for Web Crawling >中提到的一种指纹生成算法或 ...
- js报错 object is not a function
主要是js函数名重名了,重命名就可以了.
- 用HttpSessionListener统计在线用户或做账号在线人数管理
使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().inva ...