가을 표현하다


가을 표현하다

수업때 배운 Processing으로 가을을 표현해 보았다. 가을하면 생각나는 장면은 하늘에서 빨강으로 그리고 노랑으로 물든 나뭇잎들이 떨어지는 장면이다. Particle system을 이용해 낙엽이 떨어지는 동작을 표현했다.  마우스 버튼을 누르면 바람이 불어 낙엽들이 한쪽 스크린으로 날아가는 모습 또한 표현했다.





Processing Source Code:
// Richard Y. Park
// Oct. 18, 2017
// SADI201713013
// Product Interaction
// License: MIT
color bgc = color(0,0,0);
color skyc = color(209, 239, 245);
color groundc = color(150,52,22);
color red = color(200,0,0);
color yellow = color(200,200,0);
int brightness = 200;
float r = 0;
int counter = 0;
ParticleSystem ps1, ps2;
void setup(){
  size(500, 500, P3D);
  ps1 = new ParticleSystem(red, new PVector(0, -50,0));
  ps2 = new ParticleSystem(yellow, new PVector(0, -50,0));
}
void draw(){
  counter++;
  camera();
  background(50);
  ambientLight(brightness, brightness, brightness);
  directionalLight(155, 155, 155, 0, 1, 0.5);
  translate(width/2, height/2, 380);
  fill(skyc);
  noStroke();
  pushMatrix();
  translate(0, 0, -151); // -500
  box(500, 500, 0);
  popMatrix();
  ps1.addParticle();
  ps1.run();
  ps2.addParticle();
  ps2.run();
  //saveFrame("line-######.png");
}
class ParticleSystem {
  ArrayList<Particle> particles;
  PVector origin;
  color c;
  ParticleSystem(color c, PVector position) {
    origin = position.copy();
    particles = new ArrayList<Particle>();
    this.c = c;
  }
  void addParticle() {
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    particles.add(new Particle(c, origin));
    
    
  }
  void run() {
    for (int i = particles.size()-1; i >= 0; i--) {
      Particle p = particles.get(i);
      p.run();
      if (p.isDead()) {
        particles.remove(i);
      }
    }
  }
}
PVector wind_on = new PVector(0.01,0.0, 0.0);
PVector wind_off = new PVector(0.0,0.0, 0.0);
PVector wind = wind_off;
boolean wind_is_on = false;
class Particle {
  PVector position;
  PVector velocity;
  PVector acceleration;
  color leaf_color;
  float offset;
  float lifespan;
  Particle(color c, PVector l) {
    acceleration = new PVector(0.0, 0.001);
    velocity = new PVector(random(-.5, .5), random(-.3, 0));
    position = l.copy();
    lifespan = 500.0;
    leaf_color = c;
    offset = random(2*PI);
  }
  void run() {
    update();
    display();
  }
  void update() {
    velocity.add(acceleration);
    velocity.add(wind);
    position.add(velocity);
    lifespan -= 1.0;
  }
  void display() {
    fill(leaf_color, lifespan+500);
    pushMatrix();
    //rectMode(CENTER);
    translate(position.x,position.y,position.z);
    rotateX(PI/8 * (counter*0.3) + offset);
    triangle(-2.,-0, 2., 0, 0, 2.);
    triangle(-2.,-0, 0, -1., 2., 0);
    popMatrix();
  }
  boolean isDead() {
    if (lifespan < 0.0) {
      return true;
    } else {
      return false;
    }
  }
  
}
void mousePressed() {
  if (wind_is_on) 
  {wind = wind_off;
  wind_is_on = false;}
  else {
  wind = wind_on;
  wind_is_on = true;}
  print(wind_is_on);
}
void keyPressed() {
  if (key == 's') saveFrame("line-######.png"); 
}
cs

Comments

Popular posts from this blog

영감과 실패 보고서

1st Project Portfolio: Survival Kit