Paint sur paysage montagne

// cols= colonne, ligne= rows
int cols, rows;
// scl pour scale 
int scl = 15;
int w = 2000;
int h = 1600;
int count = 1;
float flying = 0;
// pour creer une collection d'éléments
float[][] terrain;
int wo=0;
float rotationX = 0;
float rotationZ = 0;
float rotationY =0;
int l=255;
int m=50;
void setup() {
  size(800, 800, P3D);
  cols = w / scl;
  rows = h / scl;
  terrain = new float[cols][rows];
}


void draw() {

wo += 20;
  flying -= 0.1;
// valeur pour faire bouger avec effet élévation selon y les points du terrain
  float yoff = flying;
  // boucle pour définir le cadrillage qui va bouger, defini selon x et y
  for (int y = 0; y < rows; y++) {
    float xoff = 0;
    for (int x = 0; x < cols; x++) {
      // on bouge selon l'axe y et x
      terrain[x][y] = map(noise(xoff, yoff), 0, 1, -150, 150);
      xoff += 0.2;
    }
    yoff += 0.2;
  }
 

    if (mousePressed == true) {
     
   

   stroke(l);
   fill(255);
   beginShape();
vertex(mouseX-30, mouseY-30, -30);
vertex( mouseX+30, mouseY-30, 0-30);
vertex(   mouseX,    mouseY,  0+30);

vertex( mouseX+30, mouseY-30, 0-30);
vertex( mouseX+30,  mouseY+30, 0-30);
vertex(   mouseX,    mouseY,  0+30);

vertex(mouseX+30,mouseY+30, 0-30);
vertex(mouseX-30,mouseY+30, 0-30);
vertex( mouseX, mouseY, 0+30);

vertex(mouseX-30, mouseY+30, 0-30);
vertex(mouseX-30, mouseY-30, 0-30);
vertex( mouseX, mouseY, 0+30);
endShape();
   if (keyPressed) {
   if (key == 'e' || key == 'E') {
     l -= 120;
      rotateX(rotationX);
      rotationX += PI/8;
      rotateY(PI/flying);
rotateZ(rotationZ);
rotationZ += PI/18;

  stroke(l-55);
   fill(120,57,75);
   beginShape();
vertex(mouseX-30, mouseY-30, -30);
vertex( mouseX+30, mouseY-30, 0-30);
vertex(   mouseX,    mouseY,  0+30);

vertex( mouseX+30, mouseY-30, 0-30);
vertex( mouseX+30,  mouseY+30, 0-30);
vertex(   mouseX,    mouseY,  0+30);

vertex(mouseX+30,mouseY+30, 0-30);
vertex(mouseX-30,mouseY+30, 0-30);
vertex( mouseX, mouseY, 0+30);

vertex(mouseX-30, mouseY+30, 0-30);
vertex(mouseX-30, mouseY-30, 0-30);
vertex( mouseX, mouseY, 0+30);
endShape();
   }
   }
 } else{

  background(0);
  stroke(noise(0, 255));
  fill(123,120,100);
// 1 ere translation pour avoir le plan, selon autre axe//mousepress avec tanslate?
  translate(width/2, height/2+m);
  // rotation de 60 degre
  rotateX(PI/3);
  // 2 eme translation pour corriger le fait qu'on a deplacer depuis en haut a gauche
  translate(-w/2, -h/2);
   
  // boucle pour former le terrain selon une triangulation
  for (int y = 0; y < rows-1; y++) {
    beginShape(TRIANGLE_STRIP);
    for (int x = 0; x < cols; x++) {
      // vertex pour les forme 
      vertex(x*scl, y*scl, terrain[x][y]);
      stroke(random(0,255),random(0,255),random(0,255));
     
      vertex(x*scl, (y+1)*scl, terrain[x][y+1]);
      stroke(noise(0,255), noise(0, 255), noise(0, 255));
      //rect(x*scl, y*scl, scl, scl);
    }
    endShape();
  }
}

 if (keyPressed) {
    
    if (key == 's' || key == 'S') {
      save(count+"monBeauDessin.png");
      count++;
      delay(100);
    }
     if (key == 'm' || key == 'M') {
       m+=10;
     
   }
        if (key == 'n' || key == 'N') {
       m-=10;
       
     }
       
}
}