Flocons de pixels

De Centre de Ressources Numériques - Labomedia
Révision de 4 juin 2015 à 08:39 par Serge (discussion | contributions)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Flocons de pixels
Neige.jpg


Pour modifier la page utiliser l'onglet Modifier avec formulaire.

Résumé Filtre vidéo.
Auteur(s) 01ivier
Licence CC-BY-SA 3
Date de création 23 janvier 2015


Intentions / Contexte

Écrire un filtre vidéo qui s'inspire de la chute de flocons des neige.

Principe de fonctionnement

La couleur et la taille de chaque particule qui tombe dépendent du pixel qu'elle survole.

Besoins / Compétences

Processing.

Documentation

Rendu

Code

 
import processing.video.*;

ArrayList<Bouboule> mesBoules;
Capture video;

int nbParFrame;

void setup() {

  video = new Capture(this, 640, 480);
  video.start();

  size(video.width, video.height);
  frameRate(15);
  stroke(0, 100);
  //noStroke();

  mesBoules = new ArrayList<Bouboule>();
  nbParFrame = 1;
}

void draw() {

  if (video.available()) {
    video.read();
  }

  background(0);

  if (nbParFrame < 10 && frameCount%80 == 0) {
    nbParFrame++;
  }

  if (frameCount > 80) {
    for (int i=0; i<nbParFrame; i++) {
      mesBoules.add(new Bouboule());
    }
  }

  for (int i = mesBoules.size ()-1; i >= 0; i--) {
    Bouboule element = mesBoules.get(i);
    if (element.centre.y > height+20) mesBoules.remove(i);
    element.tombe();
    element.dessin();
  }

  //println(mesBoules.size ());
}

class Bouboule {

  PVector centre, vitesse;
  int rayon;
  color couleur;
  float flottementHoriz;

  Bouboule() {     
    centre = new PVector(int(random(width)), -10);
    vitesse = new PVector(0, 1);
    rayon = 20;
    flottementHoriz = random(180);
  }

  void tombe() {

    flottementHoriz += 2;
    vitesse.x = cos(radians(flottementHoriz));

    centre.add(vitesse);
  }

  void dessin() {

    if (centre.y>0 && centre.y<height-2) {
      couleur = video.pixels[int(centre.x+centre.y*width)];
    }

    fill(couleur, 200);
    rayon = int(brightness(couleur))/15+2;
    ellipse(centre.x, centre.y, rayon, rayon);
  }
}