Advertisement
henke37

rotozoomandsinemodulate

Apr 12th, 2013
2,532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <languageVersion : 1.0;>
  2.  
  3. kernel rotozoomandsinemodulate <
  4.     namespace : "effects";
  5.     vendor : "Henke37";
  6.     version : 3;
  7. >
  8. {
  9.     input image4 src;
  10.     output pixel4 dst;
  11.    
  12.     parameter float2 zoom <
  13.         minValue: float2(0.01,0.01);
  14.         defaultValue: float2(1.0,1.0);
  15.         maxValue: float2(5.0,5.0);
  16.         previewValue: float2(0.6,0.6);
  17.         componentName: "x|y";
  18.     >;
  19.    
  20.     parameter float spin <
  21.         minValue: 0.0;
  22.         maxValue: 3.146*2.0;
  23.         parameterType: "angleRadians";
  24.         previewValue: 2.45;
  25.     >;
  26.    
  27.     parameter float2 spinCenter <
  28.         parameterType: "position";
  29.         componentName: "x|y";
  30.     >;
  31.    
  32.     parameter float2 offset <
  33.         componentName: "x|y";
  34.         minValue: float2(-1.0,-1.0);
  35.         maxValue: float2(1.0,1.0);
  36.         defaultValue: float2(0.0,0.0);
  37.         parameterType: "percentage";
  38.     >;
  39.    
  40.     parameter float2 imgSize <
  41.         parameterType: "inputSize";
  42.         inputSizeName: "src";
  43.     >;
  44.    
  45.     parameter float2 sineAmplitude <
  46.         minValue: float2(0.0,0.0);
  47.         maxValue: float2(1.0,1.0);
  48.         componentName: "x|y";
  49.         parameterType: "percentage";
  50.     >;
  51.    
  52.     parameter float2 sineOffset <
  53.         minValue: float2(0.0,0.0);
  54.         maxValue: float2(3.146*2.0,3.146*2.0);
  55.         parameterType: "angleRadians";
  56.         componentName: "x|y";
  57.     >;
  58.    
  59.     parameter float4 sinePeriod <
  60.         minValue: float4(0.0,0.0,0.0,0.0);
  61.         maxValue: float4(30.0,30.0,30.0,30.0);
  62.         componentName: "x*x|y*x|y*x|y*y";
  63.         parameterType: "percentage";
  64.     >;
  65.  
  66.     void evaluatePixel() {
  67.    
  68.         float2 pos=outCoord();
  69.         pos/=imgSize;
  70.    
  71.         pos-=spinCenter/imgSize;
  72.    
  73.         float angle=atan(pos.y,pos.x);
  74.         float dist=sqrt(pos.x*pos.x+pos.y*pos.y);
  75.         angle+=spin;
  76.        
  77.         pos.x=cos(angle)*dist;
  78.         pos.y=sin(angle)*dist;
  79.        
  80.         pos+=spinCenter/imgSize;
  81.        
  82.         pos/=zoom;
  83.        
  84.         pos+=offset;
  85.        
  86.         pos.x+=sin(sinePeriod.s*pos.x+sinePeriod.t*pos.y+sineOffset.x)*sineAmplitude.x;
  87.         pos.y+=sin(sinePeriod.p*pos.x+sinePeriod.q*pos.y+sineOffset.y)*sineAmplitude.y;
  88.        
  89.         pos*=imgSize;
  90.        
  91.         pos=mod(pos,imgSize);
  92.    
  93.         dst = sample(src,pos);
  94.     }
  95.    
  96.     #if !AIF_FLASH_TARGET
  97.     region generated() {
  98.         return everywhere();
  99.     }
  100.     #endif
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement