孤独的猫

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

processing--图形的不透明度和混合模式动画

下面是由两个圆形组成的动画,线条在两个圆形之间不停的变换位置,当鼠标单击图形的时候动画停止:

 1 PGraphics gradient1;
 2 PGraphics gradient2;
 3 PGraphics circle1; 
 4 int n=50;
 5 int m=200;
 6 float x, y, angle;
 7 void setup() {
 8   size(400, 800);
 9   frameRate(15);
10   gradient1=createGraphics(width, height);
11   gradient2=createGraphics(width, height);
12   circle1=createGraphics(width, height);
13 }
14 void draw() {
15   background(#442ee9);
16   //绘制渐变图形
17   gradient1.beginDraw(); 
18   for (int i=0; i<300; i++) {  
19     int col=i*(m-n)/300;
20     gradient1.fill(255-col*2, 220, col*2);
21     gradient1.noStroke();
22     gradient1.rect(i+50, 0, 1, height);
23   }
24   gradient1.endDraw();
25 
26   gradient2.beginDraw(); 
27   for (int i=0; i<300; i++) {  
28     int col=i*(m-n)/300;
29     gradient2.fill(255-col*0.5);
30     gradient2.noStroke();
31     gradient2.rect(i+50, 0, 1, height);
32   }
33   gradient2.endDraw();
34   //绘制圆形
35   circle1.beginDraw();
36   circle1.noStroke();
37   circle1.circle(200, 400, 300);
38   circle1.endDraw();
39   //应用圆形蒙版到渐变图形
40   gradient1.mask(circle1);
41   gradient2.mask(circle1);
42   blendMode(SCREEN);
43   push();
44   translate(0, 80);
45   tint(255, 160);
46   image(gradient2, 0, 0);
47   pop();
48   blendMode(BLEND);
49   push();
50   translate(0, -100);
51   tint(255, 220);
52   image(gradient1, 0, 0);
53   pop();
54 
55   fill(255);
56   textSize(30);
57   text("D-FORM", 136, 400);
58 
59   noFill();
60   stroke(255);
61   strokeWeight(2);
62   circle(200, 480, 300);
63   filter(BLUR, 1);
64 
65   fill(0);
66   textSize(30);
67   text("D-FORM", 136, 500);
68 
69   stroke(255, 100);
70   for (int i=0; i<9; i++) {
71     x= width/2+150*cos(radians(angle));
72     y = 300+150*sin(radians(angle));
73     line(x, y, x, y+180);
74     angle +=10;
75   }
76 }
77 void mouseClicked() { 
78   noLoop(); 
79   redraw();
80 } 

 

posted on 2024-06-15 09:59  孤独的猫  阅读(30)  评论(0)    收藏  举报