// 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;
}
}
}