`
caiwb1990
  • 浏览: 316192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

7. cocos-2dx Shader(三) 实例应用

阅读更多
Mark~ 

HSV and HLS color systems are problematic for a number of reasons. I talked with a color scientist about this recently, and his recommendation was to convert to YIQ or YCbCr space and adjust the the chroma channels (I&Q, or Cb&Cr) accordingly. (You can learn how to do that here and here.)

Once in one of those spaces, you can get the hue from the angle formed by the chroma channels, by doing hue = atan(cr/cb) (watching for cb == 0). This gives you a value in radians. Simply rotate it by adding the hue rotation amount. Once you've done that, you can calculate the magnitude of the chroma with chroma = sqrt(cr*cr+cb*cb). To get back to RGB, calculate the new Cb and Cr (or I & Q) using Cr = chroma * sin (hue), Cb = chroma * cos (hue). Then convert back to RGB as described on the above web pages.

EDIT: Here's a solution that I've tested and seems to give me the same results as your reference. You can probably collapse some of the dot products into matrix multiplies:


uniform sampler2DRect inputTexture;
uniform float   hueAdjust;
void main ()
{
    const vec4  kRGBToYPrime = vec4 (0.299, 0.587, 0.114, 0.0);
    const vec4  kRGBToI     = vec4 (0.596, -0.275, -0.321, 0.0);
    const vec4  kRGBToQ     = vec4 (0.212, -0.523, 0.311, 0.0);

    const vec4  kYIQToR   = vec4 (1.0, 0.956, 0.621, 0.0);
    const vec4  kYIQToG   = vec4 (1.0, -0.272, -0.647, 0.0);
    const vec4  kYIQToB   = vec4 (1.0, -1.107, 1.704, 0.0);

    // Sample the input pixel
    vec4    color   = texture2DRect (inputTexture, gl_TexCoord [ 0 ].xy);

    // Convert to YIQ
    float   YPrime  = dot (color, kRGBToYPrime);
    float   I      = dot (color, kRGBToI);
    float   Q      = dot (color, kRGBToQ);

    // Calculate the hue and chroma
    float   hue     = atan (Q, I);
    float   chroma  = sqrt (I * I + Q * Q);

    // Make the user's adjustments
    hue += hueAdjust;

    // Convert back to YIQ
    Q = chroma * sin (hue);
    I = chroma * cos (hue);

    // Convert back to RGB
    vec4    yIQ   = vec4 (YPrime, I, Q, 0.0);
    color.r = dot (yIQ, kYIQToR);
    color.g = dot (yIQ, kYIQToG);
    color.b = dot (yIQ, kYIQToB);

    // Save the result
    gl_FragColor    = color;
}




引用
http://stackoverflow.com/questions/9234724/how-to-change-hue-of-a-texture-with-glsl
分享到:
评论

相关推荐

    基于cocos2dx 2.x做的一些shader效果Demo

    本篇文章将深入探讨如何在Cocos2dx 2.x中应用Shader,并通过提供的FKCocos2dxEffectDemo实例进行详细解析。 首先,理解Shader的概念至关重要。Shader是运行在GPU上的小型程序,负责计算物体表面的颜色、光照等视觉...

    idea cocos2d-x cocos-intellij-plugin-2.0.0-beta.zip

    在本文中,我们将深入探讨如何利用IntelliJ IDEA,一个备受赞誉的Java集成开发环境,通过安装并使用“cocos-intellij-plugin”插件,提升Cocos2d-js的开发效率。 首先,我们要明确“cocos-intellij-plugin-2.0.0-...

    【cocos2d-x】shader-高斯模糊

    高斯模糊是一种图像模糊滤波器,它用正态分布计算图像中每个像素的变换。

    cocos-2d回合制游戏

    总的来说,这个“cocos-2d回合制游戏”项目是一个很好的学习和实践Cocos-2d游戏开发的实例。通过研究其代码和设计,开发者不仅可以了解Cocos-2d引擎的使用,还能深入理解回合制游戏的开发流程和设计原则。无论你是...

    cocos2d-0.99.4-x-0.7.1.zip

    《cocos2d-0.99.4-x-0.7.1.zip:深入了解Cocos2D游戏引擎的历史与应用》 Cocos2D是一款开源的游戏开发框架,以其高效、易用和跨平台的特性在游戏开发者中享有广泛声誉。这个名为"cocos2d-0.99.4-x-0.7.1.zip"的...

    Cocos2d-x 2.x字体描边效果(Shader实现)

    Cocos2d-x 2.X实现的一基于CCLabelTTF + Shader的字体描边效果,具体可以参考这篇博客,http://blog.csdn.net/oktears/article/details/43200757

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    cocos2d-x二维码控件

    Cocos2d-x是一个流行的开源跨平台2D游戏开发框架,用C++编写,支持多种操作系统,包括iOS、Android、Windows等。在这个场景中,我们关注的是如何在Cocos2d-x项目中实现一个二维码控件。二维码(Quick Response Code...

    龙灵修-讲Lua的cocos2d-x进阶视频.rar

    cocos2d-x进阶教程1_1搭建和配置Lua开发...cocos2d-x进阶教程1_7LuaTable使用2.mp4 cocos2d-x进阶教程1_8LuaTable使用3.mp4 cocos2d-x进阶教程1_9LuaTable读写数据文件.mp4 cocos2d-x进阶教程1_10在Lua中实现串行化.mp4

    cocos2dx替换颜色shader(把紫色替换成灰色)

    本教程将详细讲解如何使用Shader将紫色替换为灰色,同时也会涉及Shader的基本概念和Cocos2d-x中的Shader应用。 首先,让我们了解什么是Shader。Shader是一种在GPU(图形处理器)上运行的程序,它处理图像渲染过程中...

    我所理解的cocos2dx pdf

    在本篇内容中,我们将深入探讨“我所理解的cocos2dx pdf”这一主题,通过对标题、描述以及部分关联内容的分析,提取并总结出关于Cocos2dx的重要知识点。 ### Cocos2d-x 概览 #### 1. Cocos2d-x 是什么? Cocos2d-x...

    Cocos2d-X游戏源码大合集.rar

    这个“Cocos2d-X游戏源码大合集.rar”文件显然包含了大约三十个使用Cocos2d-X开发的游戏实例源代码,对于学习和理解Cocos2d-X游戏开发的原理、技巧以及实践应用具有极大的价值。 1. **Cocos2d-X基础**: Cocos2d-X...

    cocos2d-x-cocos2d-x-2.2.2.zip

    标签“cocos”和“cocos2dx”分别代表了cocos系列框架和cocos2d-x这个特定的分支。cocos2d-x不仅适用于游戏开发,还可以用于创建教育软件、互动媒体和其他2D图形应用,其强大的场景管理、精灵(Sprite)系统和粒子...

    cocos2d-lua 实现富文本

    在游戏开发领域,Cocos2d-x 是一个广泛使用的开源跨平台2D游戏引擎,而 Lua 是一种轻量级的脚本语言,常被用作 Cocos2d-x 的脚本接口,即 Cocos2d-lua。在这个场景下,“cocos2d-lua 实现富文本”意味着我们要探讨...

    iOS实例开发源码——lhunath-Cocos2D-iPhone.old-9ab3d34.zip

    它基于Python的Cocos2D,提供了丰富的功能,如场景管理、动作效果、精灵动画等,使得开发者能够快速构建高质量的游戏应用。这份源码库"lhunath-Cocos2D-iPhone.old-9ab3d34"为我们提供了一个深入理解Cocos2D-iPhone...

    cocos2dx3.x_shader

    cocos2dx3.x_shader仅供学习

    Quick-Cocos2dx-Community 3.6.5 Release Note 带官方热更新等demo

    Quick-Cocos2dx-Community 3.6.5版本发布说明是Cocos2d-x社区的一个重要里程碑,这个版本包含了官方支持的热更新功能以及其他一些关键的改进和演示项目。Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,并...

    kbengine-cocos2dx-cocos2dx-consoft.zip

    Cocos2d-x 是一款跨平台的2D游戏开发框架,广泛应用于游戏开发。这个压缩包 "kbengine-cocos2dx-cocos2dx-consoft.zip" 显然是将 KBEngine 引擎与 Cocos2d-x 框架结合的示例项目,帮助开发者了解如何在 Cocos2d-x ...

    iOS游戏应用源代码——lhunath-Cocos2D-iPhone.old-9ab3d34.zip

    在iOS游戏开发领域,Cocos2D-iPhone是一个广受欢迎的开源框架,它为开发者提供了创建2D游戏、教育应用、演示和其他互动内容的强大工具。这个压缩包"lhunath-Cocos2D-iPhone.old-9ab3d34.zip"包含了由开发者lhunath...

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

Global site tag (gtag.js) - Google Analytics