Cheminements
De Centre de Ressources Numériques - Labomedia
Cheminements |
---|
Pour modifier la page utiliser l'onglet Modifier avec formulaire.
Résumé | Filtre Processing |
---|---|
Auteur(s) | 01ivier |
Licence | CC-BY-SA 3 |
Date de création | 11 décembre 2014 |
Sommaire
Intentions / Contexte
Fait suite à une aide apportée sur le forum Codelab.
Principe de fonctionnement
Affiche un flux vidéo au travers d'un cheminement de segments.
Besoins / Compétences
Processing
Documentation
Explications
Une personne ayant demandé sur le forum Codelab comment générer le tracé d'un chemin aléatoire, j'ai partiellement répondu à sa demande et réalisé que ce pourrait être la base d'un filtre vidéo.
À chaque frame, 500 segments sont dessinés aléatoirement au bout des 500 précédents. Leur couleur est déterminée par celle du pixel de la vidéo où se situe la première extrémité de chaque segment.
Vidéo
Code
import processing.video.*;
Capture cam;
int Longg = 640;
int Largg = 480;
int nbPix = Longg*Largg;
Chemin[] carte;
void setup() {
cam = new Capture(this, Longg, Largg, "/dev/video0", 20);
cam.start();
size(cam.width, cam.height);
frameRate(60);
carte = new Chemin[500];
for (int i=0; i<carte.length; i++) {
carte[i] = new Chemin();
}
background(0);
}
void draw() {
if (cam.available() == true) {
cam.read();
}
for (int i=0; i<carte.length; i++) {
carte[i].dessine();
}
}
class Chemin {
int X1, Y1, X2, Y2;
color couleur;
Chemin() {
}
void dessine() {
if (frameCount == 1) {
X1 = width/2;
Y1 = height/2;
X2 = X1 + decalage();
Y2 = Y1 + decalage();
}
if (X1>0 && X1<width && Y1>0 && Y1<height) {
couleur = cam.pixels[X1+Y1*width];
}
stroke(couleur);
line(X1, Y1, X2, Y2);
X1 = X2;
Y1 = Y2;
X2 = X1 + decalage();
Y2 = Y1 + decalage();
}
int decalage() {
// retourne -5, 0 ou 5
return(1*(int(random(3))-1));
}
}