Plantasia

Porteur(s) du projet : Sévan, Blandine

Date : 15/01/2019

* Cop d'avance : axe 5, bien vivre en PACA

Qualité illustrations

source du programme (.zip), inutile de tout expliquer - commenter le programme directement

Orthographe!! Expression!

**Contexte**

Suite du projet Plantasia à travers un programme intéractif et des affiches animées. L'installation incarne un autel de prière, le but était de dévellopper une lithurgique autour du végétale. Entouré d'affiche et immergé à travers une bande son, le fidèle peut faire apparaitre grâce à un capteur de mouvement leap-motion (tutos : leap motion 1 & leap motion 2) particules vertes. Ce geste est une vénération faite aux plantes, il vise à se faire pardonner pour ces péchés et se reconnecter avec la nature.

**Contenu**

3 affiches animées > logiciel After effect

p3.mp4 p2.mp4 p1.mp4

1 programme > processing

1 bande son > logic pro

plantasia.mp3

**Détails programme**

V1 (juste les particules)

Début description programme

// importation des librairies import de.voidplus.leapmotion.*; //création de "l'objet" leap LeapMotion leap; ArrayList<PVector> points; PVector fp; ArrayList<Particle> pts; PFont a;

Paramètres du setup

void setup() {
fullScreen();
background(0);
frameRate(30);
noCursor();
points = new ArrayList<PVector>(); // ArrayList VIDE
noStroke();
pts = new ArrayList<Particle>();
}

Paramètres du draw

void draw() {
int fps = leap.getFrameRate();
frameRate(fps);
// Mains
for (Hand hand : leap.getHands()) {
// Doigts
for (Finger finger : hand.getFingers()) {
fp = finger.getPosition();
if (fp.z <= 30) {
points = new ArrayList<PVector>();
} else if (fp.z > 30) {
points.add(new PVector(fp.x, fp.y));
}
}
}
{
for (int i = points.size()-1; i >= 0; i--) {
PVector p = points.get(i);
Particle newP = new Particle(p.x, p.y, i+pts.size(), i+pts.size());
pts.add(newP);
}
}
for (int i=0; i<pts.size(); i++) {
Particle p = pts.get(i);
p.update();
p.display();
}
for (int i=pts.size()-1; i>-1; i--) {
Particle p = pts.get(i);
if (p.dead) {
pts.remove(i);
}
}
}

Reset programme avec la touche “A”

void keyPressed() {
if (key == 'a') {
for (int i=pts.size()-1; i>-1; i--) {
Particle p = pts.get(i);
pts.remove(i);
}
background(0);
}
}

Création class particule

class Particle {
PVector loc, vel, acc;
int lifeSpan, passedLife;
boolean dead;
float alpha, weight, weightRange, decay, xOffset, yOffset;
color c;
Particle(float x, float y, float xOffset, float yOffset) {
loc = new PVector(x, y);
float randDegrees = random(360);
vel = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
vel.mult(random(5));
acc = new PVector(0, 0);
lifeSpan = int(random(30, 20)); //intensité
decay = random(0.50, 0.5); //decalage
c = color(random(100), random(100), random(100), 255);
weightRange = random(20); //rayon
this.xOffset = xOffset;
this.yOffset = yOffset;
}
void update() {
if (passedLife>=lifeSpan) {
dead = true;
} else {
passedLife++;
}
alpha = float(lifeSpan-passedLife)/lifeSpan * 30+100;
weight = float(lifeSpan-passedLife)/lifeSpan * weightRange;
acc.set(0, 0);
float rn = (noise((loc.x+frameCount+xOffset)*0.01, (loc.y+frameCount+yOffset)*0.01)-0.8)*4*PI;
float mag = noise((loc.y+frameCount)*0.01, (loc.x+frameCount)*0.01);
PVector dir = new PVector(cos(rn), sin(rn));
acc.add(dir);
acc.mult(mag);
float randDegrees = random(360);
PVector randV = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
randV.mult(0.5);
acc.add(randV);
vel.add(acc);
vel.mult(decay);
vel.limit(30);
loc.add(vel);
}
void display() {
strokeWeight(weight+1);
c = color(random(100), random(255), random(100), 255);
stroke(0, alpha);
point(loc.x, loc.y);
strokeWeight(weight);
stroke(c);
point(loc.x, loc.y);
}
}

**Version 2**

Nous avons édités un deuxième programme en intégrant un fond fixe (textes sacrés et astéroïdes sacré de Plantasia) et les vidéos et le son seront déclanchées par l'utilisateur (inspiration des retables du Moyen-âge). La lecture des vidéos se fait grâce a une zone définit dans le programme. Cette expérience est accompagnée d'une édition. La mise en page et la papier choisit se rapproche des tracts religieux.

video-1553514662.mp4

Ajouts au programme

2 nouvelles librairies ddf.minim (son) & processing.video (video)

import ddf.minim.*;
Minim minim;
AudioSnippet ping;
import processing.video.*;
Movie mg, mm, md;

Ajouts au setup

background(0);
img=loadImage("plantasia.jpg");
minim=new Minim(this);
ping=minim.loadSnippet("plantasia.mp3");
ping.loop();
mg=new Movie(this, "mg.mp4");
mm=new Movie(this, "mm.mp4");
md=new Movie(this, "md.mp4");
mg.loop();
mm.loop();
md.loop();

Ajouts au draw

ping.play();
image(img, 0, 0);
// boucle qui définit les coordonées X et Y de lancement des vidéos
for (Finger finger : leap.getFingers ()) {//créer l'objet main
fp= finger.getPosition();
if (fp.x<=500&&fp.y<=800) {
tint(255, 20);
image(mg, 120, 300);
} else if (fp.x>=900&&fp.y<=800) {
tint(255, 20);
image(md, 975, 275, 280, 200);
} else if (fp.x<=899||fp.x<=501) {
tint(255, 20);
image(mm, 450, 550, 400, 180);
}
}

void movieEvent(Movie m) {
m.read();
}