Flocons de pixels

Ce wiki a été archivé en 2018.

Le nouveau wiki se trouve à: ressources.labomedia.org

Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia.

De Centre de Ressources Numériques - Labomedia
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);
  }
}