Palimpseste 1

De Wikilipo
Aller à la navigation Aller à la recherche

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();
  }

}