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

适合:

1:想初步学习shader的同学可以了解下。
2:想用cocos2dx做点效果的同学可以了解下。
请直接下载当前页面附件的rar包就可以了。

如果需要直接运行程序的可以到百度盘下载:http://pan.baidu.com/s/1jGoRCmM

http://pan.baidu.com/s/1u9jEA




代码预览:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //--------------------------------------------------------  
  2. // 模糊效果  
  3. static const GLchar* s_szBlurFSH =  
  4.     "                                                               \n\  
  5.     precision mediump float;                                        \n\  
  6.     uniform sampler2D u_Texture;                                    \n\  
  7.     uniform vec2 u_TextureCoordOffset[25];                          \n\  
  8.     varying vec2 v_texCoord;                                        \n\  
  9.     varying vec4 v_fragmentColor;                                   \n\  
  10.                                                                     \n\  
  11.     void main(void)                                                 \n\  
  12.     {                                                               \n\  
  13.         vec4 sample[25];                                                \n\  
  14.                                                                         \n\  
  15.         for (int i = 0; i < 25; i++)                                 \n\  
  16.         {                                                               \n\  
  17.         sample[i] = texture2D(u_Texture,                                \n\  
  18.         v_texCoord.st + u_TextureCoordOffset[i]);                       \n\  
  19.         }                                                               \n\  
  20.         //--------------------------------------------------------      \n\  
  21.         //   1 3 1                                                      \n\  
  22.         //   3 1 3   / 11                                               \n\  
  23.         //   1 3 1                                                      \n\  
  24.                                                                         \n\  
  25.         //gl_FragColor = (sample[0] + (3.0*sample[1]) + sample[2] +     \n\  
  26.         //  (3.0*sample[3]) + sample[4] + (3.0*sample[5]) +             \n\  
  27.         //  sample[6] + (3.0*sample[7]) + sample[8]) / 11.0;            \n\  
  28.         //--------------------------------------------------------      \n\  
  29.         // Gaussian weighting:                                          \n\  
  30.         // 1  4  7  4 1                                                 \n\  
  31.         // 4 16 26 16 4                                                 \n\  
  32.         // 7 26 41 26 7 / 273 (i.e. divide by total of weightings)      \n\  
  33.         // 4 16 26 16 4                                                 \n\  
  34.         // 1  4  7  4 1                                                 \n\  
  35.                                                                         \n\  
  36.         gl_FragColor = (                                                \n\  
  37.         (1.0  * (sample[0] + sample[4]  + sample[20] + sample[24])) +   \n\  
  38.         (4.0  * (sample[1] + sample[3]  + sample[5]  + sample[9] +      \n\  
  39.             sample[15] + sample[19] + sample[21] + sample[23])) +       \n\  
  40.         (7.0  * (sample[2] + sample[10] + sample[14] + sample[22])) +   \n\  
  41.         (16.0 * (sample[6] + sample[8]  + sample[16] + sample[18])) +   \n\  
  42.         (26.0 * (sample[7] + sample[11] + sample[13] + sample[17])) +   \n\  
  43.         (41.0 * sample[12])                                             \n\  
  44.         ) / 273.0;                                                      \n\  
  45.     }";  
  46. //--------------------------------------------------------  
  47. // 磨砂  
  48. static const GLchar* s_szSharpenFSH =  
  49.     "                                                               \n\  
  50.     precision mediump float;                                        \n\  
  51.     uniform sampler2D u_Texture;                                    \n\  
  52.     uniform vec2 u_TextureCoordOffset[25];                          \n\  
  53.     varying vec2 v_texCoord;                                        \n\  
  54.     varying vec4 v_fragmentColor;                                   \n\  
  55.                                                                     \n\  
  56.     void main(void)                                                 \n\  
  57.     {                                                               \n\  
  58.         vec4 sample[25];                                            \n\  
  59.                                                                     \n\  
  60.         for (int i = 0; i < 25; i++)                             \n\  
  61.         {                                                           \n\  
  62.             sample[i] = texture2D(u_Texture,                        \n\  
  63.                 v_texCoord.st + u_TextureCoordOffset[i]);           \n\  
  64.         }                                                           \n\  
  65.         //--------------------------------------------------------  \n\  
  66.         //   -1 -1 -1                                               \n\  
  67.         //   -1  9 -1                                               \n\  
  68.         //   -1 -1 -1                                               \n\  
  69.                                                                     \n\  
  70.         //gl_FragColor = (sample[4] * 9.0) -                        \n\  
  71.         //  (sample[0] + sample[1] + sample[2] +                    \n\  
  72.         //  sample[3] + sample[5] +                                 \n\  
  73.         //  sample[6] + sample[7] + sample[8]);                     \n\  
  74.         //--------------------------------------------------------  \n\  
  75.         // Sharpen weighting:                                       \n\  
  76.         //  0 -1 -1 -1  0                                           \n\  
  77.         // -1  2 -4  2 -1                                           \n\  
  78.         // -1 -4 13 -4 -1                                           \n\  
  79.         // -1  2 -4  2 -1                                           \n\  
  80.         //  0 -1 -1 -1  0                                           \n\  
  81.                                                                     \n\  
  82.         //gl_FragColor = (                                          \n\  
  83.         //(-1.0  * ( sample[1] + sample[2]  + sample[3] + sample[5] +   \n\  
  84.         //sample[9] + sample[10] + sample[14] + sample[15] +            \n\  
  85.         //sample[19] + sample[21] + sample[22] + sample[23]) ) +        \n\  
  86.         //(2.0 * (sample[6] + sample[8] + sample[16] + sample[18])) +   \n\  
  87.         //(-4.0 *(sample[7] + sample[11] + sample[13] + sample[17]))+   \n\  
  88.         //( 13.0 * sample[12] )                                     \n\  
  89.         //);                                                            \n\  
  90.                                                                                         \n\  
  91.         // 1  1  1  1  1                                                                \n\  
  92.         // 1  1  1  1  1                                                                \n\  
  93.         // 1  1 -14 1  1                                                                \n\  
  94.         // 1  1  1  1  1                                                                \n\  
  95.         // 1  1  1  1  1                                                                \n\  
  96.                                                                                         \n\  
  97.         gl_FragColor = -14.0 * sample[12];                                              \n\  
  98.                                                                                         \n\  
  99.         for (int i = 0; i < 25; i++)                                                 \n\  
  100.         {                                                                               \n\  
  101.         if (i != 12)                                                                    \n\  
  102.         gl_FragColor += sample[i];                                                      \n\  
  103.         }                                                                               \n\  
  104.         gl_FragColor /= 14.0;                                                           \n\  
  105.     }";  
  106. //--------------------------------------------------------           
  107. // 膨胀  
  108. static const GLchar* s_szDilateFSH =  
  109.     "                                                               \n\  
  110.     precision mediump float;                                        \n\  
  111.     uniform sampler2D u_Texture;                                    \n\  
  112.     uniform vec2 u_TextureCoordOffset[25];                          \n\  
  113.     varying vec2 v_texCoord;                                        \n\  
  114.     varying vec4 v_fragmentColor;                                   \n\  
  115.                                                                     \n\  
  116.     void main(void)                                                 \n\  
  117.     {                                                               \n\  
  118.     vec4 sample[25];                                                \n\  
  119.     vec4 maxValue = vec4(0.0);                                                          \n\  
  120.                                                                                         \n\  
  121.     for (int i = 0; i < 25; i++)                                                     \n\  
  122.     {                                                                                   \n\  
  123.         // Sample a grid around and including our texel                                 \n\  
  124.         sample[i] = texture2D(u_Texture, v_texCoord.st + u_TextureCoordOffset[i]);      \n\  
  125.         // Keep the maximum value                                                       \n\  
  126.         maxValue = max(sample[i], maxValue);                                            \n\  
  127.     }                                                                                   \n\  
  128.                                                                                         \n\  
  129.     gl_FragColor = maxValue;                                                            \n\  
  130.     }";   
  131. //--------------------------------------------------------    
  132. // 侵蚀效果  
  133. static const GLchar* s_szErodeFSH =  
  134.     "                                                               \n\  
  135.     precision mediump float;                                        \n\  
  136.     uniform sampler2D u_Texture;                                    \n\  
  137.     uniform vec2 u_TextureCoordOffset[25];                          \n\  
  138.     varying vec2 v_texCoord;                                        \n\  
  139.     varying vec4 v_fragmentColor;                                   \n\  
  140.                                                                     \n\  
  141.     void main(void)                                                 \n\  
  142.     {                                                               \n\  
  143.     vec4 sample[25];                                                                \n\  
  144.     vec4 minValue = vec4(1.0);                                                      \n\  
  145.                                                                                     \n\  
  146.     for (int i = 0; i < 25; i++)                                                 \n\  
  147.     {                                                                               \n\  
  148.         // Sample a grid around and including our texel                             \n\  
  149.         sample[i] = texture2D(u_Texture, v_texCoord.st + u_TextureCoordOffset[i]);  \n\  
  150.         // Keep the minimum value                                                   \n\  
  151.         minValue = min(sample[i], minValue);                                        \n\  
  152.     }                                                                               \n\  
  153.                                                                                     \n\  
  154.     gl_FragColor = minValue;                                                        \n\  
  155.     }";   
  156. //--------------------------------------------------------  
  157. // Laplacian描边效果   
  158. static const GLchar* s_szLaplacianEdgeDetectionFSH =  
  159.     "                                                               \n\  
  160.     precision mediump float;                                        \n\  
  161.     uniform sampler2D u_Texture;                                    \n\  
  162.     uniform vec2 u_TextureCoordOffset[25];                          \n\  
  163.     varying vec2 v_texCoord;                                        \n\  
  164.     varying vec4 v_fragmentColor;                                   \n\  
  165.                                                                     \n\  
  166.     void main(void)                                                 \n\  
  167.     {                                                               \n\  
  168.     vec4 sample[25];                                                                \n\  
  169.                                                                                     \n\  
  170.     for (int i = 0; i < 25; i++)                                                 \n\  
  171.     {                                                                               \n\  
  172.         // Sample a grid around and including our texel                             \n\  
  173.         sample[i] = texture2D(u_Texture, v_texCoord.st + u_TextureCoordOffset[i]);  \n\  
  174.     }                                                                               \n\  
  175.                                                                                     \n\  
  176.     // Laplacian weighting:                                                         \n\  
  177.     // -1 -1 -1 -1 -1                                                               \n\  
  178.     // -1 -1 -1 -1 -1                                                               \n\  
  179.     // -1 -1 24 -1 -1                                                               \n\  
  180.     // -1 -1 -1 -1 -1                                                               \n\  
  181.     // -1 -1 -1 -1 -1                                                               \n\  
  182.                                                                                     \n\  
  183.     gl_FragColor = 24.0 * sample[12];                                               \n\  
  184.                                                                                     \n\  
  185.     for (int i = 0; i < 25; i++)                                                 \n\  
  186.     {                                                                               \n\  
  187.         if (i != 12)                                                                \n\  
  188.             gl_FragColor -= sample[i];                                              \n\  
  189.     }                                                                               \n\  
  190.     }";  
  191. //--------------------------------------------------------  
  192. // Sobel边缘检测  
  193. static const GLchar* s_szSobelEdgeDetectionFSH =  
  194.     "                                                                   \n\  
  195.     precision mediump float;                                            \n\  
  196.     uniform sampler2D u_Texture;                                        \n\  
  197.     uniform vec2 u_TextureCoordOffset[25];                              \n\  
  198.     varying vec2 v_texCoord;                                            \n\  
  199.     varying vec4 v_fragmentColor;                                       \n\  
  200.                                                                         \n\  
  201.     void main(void)                                                     \n\  
  202.     {                                                                   \n\  
  203.         vec4 sample[25];                                                \n\  
  204.                                                                         \n\  
  205.         for (int i = 0; i < 25; i++)                                 \n\  
  206.         {                                                               \n\  
  207.         sample[i] = texture2D(u_Texture,                                \n\  
  208.         v_texCoord.st + u_TextureCoordOffset[i]);                       \n\  
  209.         }                                                               \n\  
  210.         // Sobel x:                                                     \n\  
  211.         // 1  2  0 -2 -1                                                \n\  
  212.         // 4  8  0 -8 -4                                                \n\  
  213.         // 6 12  0 -12-6    / 12                                        \n\  
  214.         // 4  8  0 -8 -4                                                \n\  
  215.         // 1  2  0 -2 -1                                                \n\  
  216.         // Sobel y:                                                     \n\  
  217.         // -1 -4 -6 -4 -1                                               \n\  
  218.         // -2 -8 -12-8 -2                                               \n\  
  219.         //  0  0  0  0  0   / 12                                        \n\  
  220.         //  2  8 12  8  2                                               \n\  
  221.         //  1  4  6  4  1                                               \n\  
  222.                                                                         \n\  
  223.         vec4 vertEdge = sample[0] + 4.0 * sample[1] +                   \n\  
  224.         6.0 * sample[2] + 4.0 * sample[3] + sample[4] +                 \n\  
  225.         2.0 * sample[5] + 8.0 * sample[6] + 12.0 * sample[7] +          \n\  
  226.         8.0 * sample[8] + 2.0 * sample[9] - 2.0 * sample[15] -          \n\  
  227.         8.0 * sample[16] - 12.0 * sample[17] - 8.0 * sample[18] -       \n\  
  228.         2.0 * sample[19] - sample[20] - 4.0 * sample[21] -              \n\  
  229.         6.0 * sample[22] - 4.0 * sample[23] - sample[24];               \n\  
  230.                                                                         \n\  
  231.         vec4 horizEdge = - sample[0] - 2.0 * sample[1] +                \n\  
  232.         2.0 * sample[3] + sample[4] - 4.0 * sample[5] -                 \n\  
  233.         8.0 * sample[6] + 8.0 * sample[8] + 4.0 * sample[9] -           \n\  
  234.         6.0 * sample[10] - 12.0 * sample[11] + 12.0 * sample[13] +      \n\  
  235.         6.0 * sample[14] - 4.0 * sample[15] - 8.0 * sample[16] +        \n\  
  236.         8.0 * sample[18] + 4.0 * sample[19] - sample[20] -              \n\  
  237.         2.0 * sample[21] + 2.0 * sample[23] + sample[24];               \n\  
  238.                                                                         \n\  
  239.         //gl_FragColor.rgb = sqrt(horizEdge.rgb) + sqrt(vertEdge.rgb);  \n\  
  240.         gl_FragColor.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) +       \n\  
  241.             (vertEdge.rgb * vertEdge.rgb)) / 12.0f;                     \n\  
  242.         gl_FragColor.a = 1.0;                                           \n\  
  243.     }";  
  244. //--------------------------------------------------------  
原文地址: http://www.oschina.net/code/piece_full?code=38156&piece=56414#56414
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值