3D : dessiner des cabanes à la Frank Lloyd Wright

Bon, les fans de l’architecte vont hurler. Ce n’est pas vraiment du Frank Lloyd Wright, mais des dessins 3D avec deux types de structures : piliers et plateaux, disposés aléatoirement dans l’espace 3D.

Précédent | 3/26 | Suivant

On utilisera la barre d’espacement pour générer une nouvelle structure, la souris sur l’axe horizontal pour taire tourner de dessin, et toutes les autres touches pour faire apparaitre un "sol".

Le code

Nous utilisons randomSeed() pour afficher constamment la même structure générée au hasard.

// cabanes à la Franck


int nb_minimum=6; // nombre d'element minimum
int nb_maximum=20; // nombre maximal d'element

long lerandom;
boolean sol=true;

void setup() {
 size(1200, 800, P3D);
 smooth();
 newseed();
}

void draw() {
 background(255);

 stroke(1);
 fill(255);
 directionalLight(210, 210, 210, -1, 1, 0);
 ambientLight(120, 120, 120);
 randomSeed(lerandom);
 translate(width/2, 0, -250);
 rotateY(map(mouseX, 0, width, 0, TWO_PI));

 int nbc=int(random(nb_minimum, nb_maximum)); // nombre d'elements

 for (int i=0;i<nbc;i++) {
   pushMatrix();
   float largeur, hauteur;

   float type=random(10);
   // pilier ou plateau ?
   if (type>5) {
     // plateau
     largeur=random(250, 400);
     hauteur=random(2, 10);
     translate(random(-300, 300), height-random(50, 500), random(-30, 30));
   }
   else {
     // pilier
     largeur=random(10, 30);
     hauteur=random(200, 400);
     translate(random(-300, 300), height-hauteur, random(-30, 30));
   }

   box(largeur, hauteur, largeur);
   popMatrix();
 }
 
 // sol
 if(sol==true){
 fill(200);
 noStroke();
 translate(0, height, 0);
 box(width*2, 2, width*2);
 }
}

void keyPressed() {
 if(key==' '){
 newseed();
 } else {
  if(sol==true){
   sol=false;
  }  else {
   sol=true;
  }
 }
}

void newseed() {
 lerandom=int(random(1000));
}