Palimpseste 1
Description
Première phase, statique, de Palimpseste. Le mot est projeté en superposition par tous les modules. Même mot, même police, même taille, même disposition.
Quelques contraintes
- format: 854 x 480, pour un picoprojecteur 16:9 comme les 3 candidats (Acer, Optoma, Samsung) les plus sérieux
- fond noir
- contenu en blanc ou teintes de gris
- le mot choisi: "palimpseste"
- police "condensed": la police choisie est "Tw Cen MT Condensed Extra Bold" (à télécharger dans la bibliothèque des fontes du système).
- déclenchement manuel de la phase 2
Code processing
Voici le code du premier état de la pièce.
PFont fontA;
int x=-5; //décalage horizontal
int y=284; //décalage vertical
int z=198; //taille de police
void setup() {
size(854, 480); // selon le picoprojecteur choisi (rapport 16:9)
background(0); // fond noir
fontA = createFont("Tw Cen MT Condensed Extra Bold",z); // définition de la police
noLoop();
}
void draw() {
textFont(fontA, z); //
fill(255); // couleur de fonte: blanc
//écriture du mot lettre à lettre
text("p",x,y);
text("a",91+x,y);
text("l",180+x,y);
text("i",228+x,y);
text("m",276+x,y);
text("p",407+x,y);
text("s",497+x,y);
text("e",569+x,y);
text("s",649+x,y);
text("t",721+x,y);
text("e",775+x,y);
}
Le mot est écrit lettre par lettre, de sorte à faciliter le traitement que l'on voudra opérer, en phase 2 et phases ultérieures, sur chacune d'entre elles.
Le mot est centré horizontalement et verticalement.
La classe d'objet lettre
Ci-dessous, le même sketch processing développé avec un objet lettre, dont les instances sont ici chacune des lettres du mot "palimpseste". Chaque instance a des propriétés (un ID, un contenu/caractère, une valeur alpha d'opacité, de teinte de gris, une police de caractère, une taille de police, des coordonnées sur le plan, des coordonnées de translation, un degré de rotation sur le plan, des mesures de rotation dans l'axe X, Y et Z, etc.). Vous pouvez y ajouter d'autres propriétés dont vous auriez besoin. À cette classe d'objet lettre sont liées un constructeur lettre et une méthode ecrire qui sert à afficher les instances à l'écran selon leurs propriétés. Là encore, vous pouvez décider de créer vos méthodes dont vous auriez besoin.
// police (taille et fonte)
int tailleA = 198;
PFont fontA = createFont("Tw Cen MT Condensed Extra Bold",tailleA);
// tableau des instances de lettre du mot palimpseste
lettre [] palimpseste = new lettre [0];
// variables initiales
int xinit= -5;
int yinit= 284;
// initialisation
void setup() {
size(854, 480, P3D); // 3PD, mode pour une simulation 3D à l'écran
background(0); // fond noir
smooth();
noStroke();
//construction des instances de lettre et leur affectation dans le tableau de lettres "palimpseste"
palimpseste = (lettre[]) append(palimpseste, new lettre('p',1,0.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('a',2,91.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('l',3,180.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('i',4,228.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('m',5,276.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('p',6,407.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('s',7,497.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('e',8,569.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('s',9,649.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('t',10,721.0+xinit,0.0+yinit));
palimpseste = (lettre[]) append(palimpseste, new lettre('e',11,775.0+xinit,0.0+yinit));
}
void draw() {
// on ecrit les lettres de palimpseste
background(0);
for (int i=0; i<palimpseste.length; i++) {
palimpseste[i].ecrire();
}
}
class lettre {
// propriétés des instances de la classe
int id_ltr; // identificateur de l'instance
char ltr; // le caractère associé à l'instance
int a = 255; // alpha
int c = 255; // couleur
PFont police = fontA; // police de caractère
int taille = tailleA; // taille de caractère
float x0; float y0; // coordonnées initiales de l'instance
float x; float y; // coordonnées de l'instance
float transx = 0.0; // décalage x
float transy = 0.0; // décalage y
float deg = 0.0; // angle (en °) de l'instance
float rotX = 0.0; // angle de rotation axe des X
float rotY = 0.0; // angle de rotation axe des Y
float rotZ = 0.0; // angle de rotation axe des z
// constructeur de l'instance lettre
lettre (char L, int Lid, float Lx, float Ly) {
ltr = L;
id_ltr = Lid;
x = x0 = Lx;
y = y0 = Ly;
}
// methode d'écriture de l'instance sur le plan
void ecrire() {
pushMatrix();
translate(x,y);
rotate(radians(deg));
rotateX(radians(rotX));
rotateY(radians(rotY));
rotateZ(radians(rotZ));
fill(c,a);
textFont(police, taille);
text(ltr, transx, transy);
popMatrix();
}
}