GLSL 卡通shader

本文介绍了如何使用GLSL在Cocos2d-x中实现卡通渲染效果,通过修改原始的gl版shader并进行优化,提高了在iPhone上的运行效率。详细解释了涉及的HSV转换和边缘检测算法,并提供了相关的Cocos2d-x实现代码。
摘要由CSDN通过智能技术生成
浏览Geeks3D,发现一个好玩儿的shader,改了个gles版本,用cocos2dx在iphone上跑了一下,效果如图:

原文shader是gl版,在手机上跑的很慢,iphone5全屏处理情况下帧数仅为10帧左右,我做了一些优化,使得全屏情况下帧数提升到30左右。

shader我加了些注释,如下:

#ifdef GL_ES
precision mediump float;
#endif

varying vec2 v_texCoord;
varying vec4 v_fragmentColor;

uniform float u_texWidth;
uniform float u_texHeight;
uniform float touch_x_offset;

const float edge_thres = 0.2;
const float edge_thres2 = 5.0;

#define HueLevCount 6
#define SatLevCount 7
#define ValLevCount 4
//HSV区间
float HueLevels[HueLevCount];
float SatLevels[SatLevCount];
float ValLevels[ValLevCount];

//H(色调)范围(0-360)分为6份
void buildHueLevel()
{
      HueLevels[0]= 0.0;
      HueLevels[1]= 140.0;
      HueLevels[2]= 160.0;
      HueLevels[3]= 240.0;
      HueLevels[4]= 240.0;
      HueLevels[5]= 360.0;
}

//S(饱和度)范围(0-1.0)分为7份
void buildSatLevel()
{
      SatLevels[0]= 0.0;
      SatLevels[1]= 0.15;
      SatLevels[2]= 0.3;
      SatLevels[3]= 0.45;
      SatLevels[4]= 0.6;
      SatLevels[5]= 0.8;
      SatLevels[6]= 1.0;
}

//V(亮度)范围(0-1.0)分为4份
void buildValLevel()
{
      ValLevels[0]= 0.0;
      ValLevels[1]= 0.3;
      ValLevels[2]= 0.6;
      ValLevels[3]= 1.0;
}

//将RGB转为HSV
vec3 RGBtoHSV(float r, float g, float b)
{
      float minv,maxv, delta;
      vec3res;
     
      minv =min(min(r, g), b);
      maxv =max(max(r, g), b);
      res.z =maxv;                      // v
     
      delta = maxv- minv;
     
      if( maxv !=0.0 )
              res.y = delta /maxv;          // s
      else {
              // r = g = b =0          // s = 0, v is undefined
              res.y = 0.0;
              res.x = -1.0;
              return res;
      }
     
      if( r ==maxv )
              res.x = ( g - b ) /delta;          // between yellow & magenta
      else if( g== maxv )
              res.x = 2.0 + ( b - r ) /delta;    // between cyan &yellow
      else
              res.x = 4.0 + ( r - g ) /delta;    // between magenta &cyan
     
      res.x =res.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值