cocos2dx :【OpenGL】Shader实例分析(四)- 照片闪光,圆角和遮罩

前端之家收集整理的这篇文章主要介绍了cocos2dx :【OpenGL】Shader实例分析(四)- 照片闪光,圆角和遮罩前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转发请保持地址:http://www.jb51.cc/article/p-eztjdmsh-bap.html

在游戏中,当战斗结束后,对一些获取的宝贝需要进行闪光处理。这篇文章介绍一个进行闪光处理的shader,运行效果如下:

代码如下:

  1. Shader"stalendp/imageShine"{
  2. Properties{
  3. _image("image",2D)="white"{}
  4. _percent("_percent",Range(-5,5))=1
  5. _angle("angle",Range(0,1))=0
  6. }
  7. CGINCLUDE
  8. #include"UnityCG.cginc"
  9. sampler2D_image;
  10. float_percent;
  11. float_angle;
  12. structv2f{
  13. float4pos:SV_POSITION;
  14. float2uv:TEXCOORD0;
  15. };
  16. v2fvert(appdata_basev){
  17. v2fo;
  18. o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
  19. o.uv=v.texcoord.xy;
  20. returno;
  21. }
  22. fixed4frag(v2fi):COLOR0{
  23. //计算圆角
  24. float2uv=i.uv.xy-float2(0.5);
  25. floatrx=fmod(uv.x,0.4);
  26. floatry=fmod(uv.y,0.4);
  27. floatmx=step(0.4,abs(uv.x));
  28. floatmy=step(0.4,abs(uv.y));
  29. floatalpha=1-mx*my*step(0.1,length(half2(rx,ry)));
  30. fixed2x2rotMat=fixed2x2(0.866,0.5,-0.5,0.866);//旋转矩阵,旋转30度
  31. fixed4k=tex2D(_image,i.uv);
  32. //k=fixed4(fixed3(k.r+k.g+k.b)/3,1);//灰度设置
  33. uv=i.uv-fixed2(0.5);
  34. _angle=6.283*(_angle-0.5);
  35. floathui=(2-sign(_angle-atan2(uv.y,uv.x)))/3;//百分比计算
  36. uv=(i.uv+fixed2(_percent))*2;//缩放并位移
  37. uv=mul(rotMat,uv);//旋转
  38. k+=fixed4(saturate(lerp(fixed(1),fixed(0),abs(uv.y))));//加上光线
  39. k*=fixed4(fixed3(hui),alpha);//圆角的运用
  40. returnk;
  41. ENDCG
  42. SubShader{
  43. Tags{"Queue"="Transparent"}
  44. ZWriteOff
  45. BlendSrcAlphaOneMinusSrcAlpha
  46. Pass{
  47. CGPROGRAM
  48. #pragmavertexvert
  49. #pragmafragmentfrag
  50. #pragmafragmentoptionARB_precision_hint_fastest
  51. FallBackOff
  52. }

当然把所有的功能集成在一起,效率可能不是很高,所以实际运用的过程中还需要对特定的情况作优化,这里只是对功能进行呈现而已。

原文链接:/cocos2dx/344843.html

猜你在找的Cocos2d-x相关文章