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