compositor for 2d glitch effects
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

secondapplet.pde 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. //contains the GUI (ie CP5) in the secondapplet. also contains 3 classes: shaderManager, Brick and Slider
  2. PImage bin;
  3. public class SecondApplet extends PApplet {
  4. ControlP5 cp5;
  5. shaderManager shaderManager = new shaderManager();
  6. ArrayList<Shader> shaderList = new ArrayList<Shader>();
  7. ArrayList<Brick> bricks = new ArrayList<Brick>();
  8. ArrayList<Slider> slider = new ArrayList<Slider>(); //brick
  9. public void settings() {
  10. size(275, 500);
  11. }
  12. public void setup() {
  13. surface.setLocation(285, 240);
  14. List l = Arrays.asList(availableFx);
  15. cp5 = new ControlP5(this);
  16. cp5.addScrollableList("")
  17. .setPosition(10, height-110)
  18. .setSize(80, 100)
  19. .setBarHeight(0)
  20. .setItemHeight(20)
  21. .plugTo(this, "CP5_listActions")
  22. .addItems(l)
  23. .setType(ControlP5.LIST);
  24. cp5.addToggle("rec")
  25. .setPosition(100, height-50)
  26. .setSize(20,20)
  27. .plugTo(this, "CP5_recordAction");
  28. }
  29. void CP5_recordAction(){
  30. recording = !recording;
  31. }
  32. public void draw() {
  33. background(68, 68, 68);
  34. image(bin, width-55, height-85, 40, 40);
  35. stroke(255);
  36. strokeWeight(1);
  37. line(0, height-120, width, height-120);
  38. for (int i = 0; i < shaderList.size(); i++) {
  39. bricks.get(i).update();
  40. bricks.get(i).display();
  41. }
  42. }
  43. class shaderManager {
  44. void addShader(Shader shader) {
  45. shaderList.add(shader);
  46. shader.pos = shaderList.size()-1;
  47. bricks.add(new Brick(shaderList.size()-1, shaderList.get(shaderList.size()-1).params));
  48. println("Added " + shader + " to fxList at spot. List length: " + shaderList.size());
  49. }
  50. void swapShader(int pos1, int pos2) {
  51. if (pos1 >= 0 && pos2 < shaderList.size()) {
  52. Collections.swap(shaderList, pos1, pos2);
  53. Collections.swap(bricks, pos1, pos2);
  54. shaderList.get(pos1).pos = pos1;
  55. shaderList.get(pos2).pos = pos2;
  56. bricks.get(pos1).pos = pos1;
  57. bricks.get(pos2).pos = pos2;
  58. }
  59. }
  60. void removeShader(int pos) {
  61. if (pos >= 0 && shaderList.size() > pos) {
  62. shaderList.remove(pos);
  63. bricks.remove(pos);
  64. for (int i = shaderList.size()-1; i > -1; i--) {
  65. bricks.get(i).pos = i;
  66. shaderList.get(i).pos = i;
  67. }
  68. }
  69. }
  70. void applyShader() {
  71. for (int i = 0; i < shaderList.size(); i++) {
  72. shaderList.get(i).getValuesFromGUI();
  73. shaderList.get(i).apply();
  74. if (i > maxFx) break;
  75. }
  76. }
  77. }
  78. class Brick {
  79. ArrayList<Slider> slider = new ArrayList<Slider>();
  80. ArrayList<Param> params = new ArrayList<Param>();
  81. int pos;
  82. Brick(int pos_, ArrayList params_) {
  83. pos = pos_;
  84. params = params_;
  85. for (int i = 0; i < params.size(); i++) {
  86. slider.add(new Slider(10, 10+20*i+pos*75, 230, 12, params.get(i).minValue, params.get(i).maxValue, params.get(i).name, params.get(i).type)); //add possible waves to slider
  87. }
  88. }
  89. void exchangeSlider(int sliderNo, Param param) {
  90. slider.get(sliderNo).setMinMax(param.minValue, param.maxValue);
  91. slider.get(sliderNo).setMode(param.type);
  92. slider.get(sliderNo).setLabel(param.name);
  93. }
  94. void update() {
  95. for (int i = 0; i < slider.size(); i++) {
  96. slider.get(i).update();
  97. params.get(i).value = slider.get(i).value;
  98. }
  99. }
  100. void display() {
  101. for (int i = 0; i < slider.size(); i++) {
  102. slider.get(i).display();
  103. }
  104. }
  105. }
  106. int pressedSlider = -1;
  107. class Slider {
  108. int x, y, w, h, mode;
  109. float minVal, maxVal, value; //should be private but doesnt work lol
  110. boolean hovering, hovering_anim_btn, animated, randomized;
  111. String label;
  112. Oscillator osci;
  113. Slider(int x_, int y_, int w_, int h_, float minVal_, float maxVal_, String label_, int mode_) {
  114. x = x_;
  115. y = y_;
  116. w = w_;
  117. h = h_;
  118. minVal = minVal_;
  119. maxVal = maxVal_;
  120. mode = mode_;
  121. label = label_ + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  122. osci = new Oscillator(int(random(2, 20)));
  123. osci.amplitude(minVal, maxVal);
  124. animated = true;
  125. randomized = true;
  126. slider.add(this);
  127. }
  128. void setPosX(int x_) {
  129. x = x_;
  130. }
  131. void setMinMax(float min, float max) {
  132. float cval = map(value, minVal, maxVal, 0, 10000);
  133. minVal = min;
  134. maxVal = max;
  135. osci.amplitude(minVal, maxVal);
  136. setValue(map(cval, 0, 10000, minVal, maxVal));
  137. }
  138. void setLabel(String lab) {
  139. label = lab + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  140. }
  141. void setMode(int mode_) {
  142. mode = mode_;
  143. }
  144. void press(int myId_) {
  145. pressedSlider = myId_;
  146. animated = false;
  147. setValue(map(mouseX, x, x+w, minVal, maxVal));
  148. }
  149. void setValue(float value_) {
  150. value = value_;
  151. value = constrain(value, minVal, maxVal);
  152. if (mode == INTVAL) value = int(round(value));
  153. }
  154. float getValue() {
  155. return(value);
  156. }
  157. void update() {
  158. osci.update();
  159. if (animated) {
  160. setValue(osci.value);
  161. }
  162. if (mouseX >= x && mouseX <= x+w && mouseY >= y && mouseY <= y+h) {
  163. hovering = true;
  164. } else {
  165. hovering = false;
  166. }
  167. if (mouseX >= x+w+5 && mouseX <= x+w+5+15 && mouseY >= y && mouseY <= y+h) {
  168. hovering_anim_btn = true;
  169. } else {
  170. hovering_anim_btn = false;
  171. }
  172. }
  173. void display() {
  174. fill(100+(40*int(hovering)));
  175. rect(x, y, w, h);
  176. fill(185+(40*int(hovering)));
  177. rect(x, y, map(value, minVal, maxVal, 0, w), h);
  178. fill(255);
  179. text(label, x+5, y+10, 10);
  180. if (animated) {
  181. fill(185+(40*int(hovering_anim_btn)));
  182. } else {
  183. fill(100+(40*int(hovering_anim_btn)));
  184. }
  185. rect(x+w+5, y, 15, 15);
  186. }
  187. }
  188. //CP5
  189. void CP5_listActions(int n) {
  190. if (shaderList.size() < maxFx) {
  191. switch(n) {
  192. case(0):
  193. shaderManager.addShader(new ASDFPIXELSORT());
  194. break;
  195. case(1):
  196. shaderManager.addShader(new DISTORTER());
  197. break;
  198. /*
  199. case(2):
  200. shaderManager.addShader(new WAHWAH());
  201. break;
  202. case(3):
  203. shaderManager.addShader(new AUECHO());
  204. break;
  205. case(4):
  206. shaderManager.addShader(new PHASER());
  207. break;
  208. case(0):
  209. shaderManager.addShader(new WZIP());
  210. break;
  211. case(0):
  212. shaderManager.addShader(new DARKER());
  213. break;
  214. case(0):
  215. shaderManager.addShader(new BRIGHTER());
  216. break;
  217. case(0):
  218. shaderManager.addShader(new MOVE());
  219. break;
  220. case(0):
  221. shaderManager.addShader(new SCALE());
  222. break;
  223. case(0):
  224. shaderManager.addShader(new EPILEPSY());
  225. break;
  226. case(0):
  227. shaderManager.addShader(new POSTERIZE());
  228. break;
  229. case(0):
  230. shaderManager.addShader(new COPYZOOM());
  231. break;
  232. case(0):
  233. shaderManager.addShader(new DUAL());
  234. break;
  235. case(0):
  236. shaderManager.addShader(new SCANKER());
  237. break;
  238. case(0):
  239. shaderManager.addShader(new PIXELSORT());
  240. break;
  241. case(0):
  242. shaderManager.addShader(new HSB());
  243. break;
  244. case(0):
  245. shaderManager.addShader(new ECHO());
  246. break;
  247. case(0):
  248. shaderManager.addShader(new SUBTLESORT());
  249. break;
  250. case(0):
  251. shaderManager.addShader(new BLACKWHITE());
  252. break;
  253. case(0):
  254. shaderManager.addShader(new DRAWGENERATIVE());
  255. break;
  256. case(0):
  257. shaderManager.addShader(new DRAWSTROKES());
  258. break;
  259. case(0):
  260. shaderManager.addShader(new FM());
  261. break;
  262. case(0):
  263. shaderManager.addShader(new GRAUZONE());
  264. break;
  265. case(0):
  266. shaderManager.addShader(new SLITSCAN());
  267. break;
  268. */
  269. default:
  270. break;
  271. }
  272. }
  273. }
  274. void mousePressed() {
  275. for (int i = slider.size()-1; i >= 0; i--) {
  276. Slider s = slider.get(i);
  277. if (s.hovering) s.press(i);
  278. if (s.hovering_anim_btn) s.animated = !s.animated;
  279. }
  280. }
  281. void mouseDragged() {
  282. if (pressedSlider != -1) {
  283. Slider s = slider.get(pressedSlider);
  284. s.setValue(map(mouseX, s.x, s.x+s.w, s.minVal, s.maxVal));
  285. }
  286. }
  287. void mouseReleased() {
  288. pressedSlider = -1;
  289. }
  290. }