/** SPACE : lägg till vatten i mitten.
R : Ta bort vatten från mitten.
W : lägg till vatten slumpmässigt.
1-9 : modifiera våg-parametern.
Q : slå av/på visning av separat terräng (påverkar hastigheten!).
A,S,D : modifiera renderingen av vattnet (gourad,textureBlending,wireframe).
Z,X,C : modifiera renderingen av terrängen (gourad,textureBlending,wireframe).
T : slumpa fram ny terräng.

Det som slukar mest resurser är renderingen. Utan rendering har appletten skrämts upp i 30 fps för ett 333*333 grid, alltså en miljon celler. :D
Inte särskilt spektakulärt, men det händer någonting iaf.
Vitt vatten betyder starka strömmar. */ Terrain terrain; Water water; float rotX=PI/3, rotZ=PI/6; int mousePX=0, mousePY=0; boolean drawTerrain = false; //------------------------- void setup(){ size(500,500, P3D); terrain = new Terrain(64); water = new Water( terrain, 100 ); frameRate(30); } //------------------------- void draw(){ background(255); //println( "total volume: "+(int)water.volume+"/"+(int)water.addedVolume ); //println( "fps: "+frameRate ); directionalLight(155,155,155, 0,0,-1); ambientLight(100,100,100); //lights(); translate(width/2,width/2,0); if( mousePressed ){ rotateX( rotX - (mouseY-mousePY)*PI/height ); rotateZ( rotZ - (mouseX-mousePX)*TWO_PI/width ); } else { rotateX( rotX ); rotateZ( rotZ ); } translate(0,0,-width*0.25); scale(1.0); water.update(); water.visualize(); if(drawTerrain) terrain.visualize(); } //------------------------- void mousePressed(){ mousePX = mouseX; mousePY = mouseY; } //------------------------- void mouseReleased(){ rotX -= (mouseY-mousePY)*PI/height; rotZ -= (mouseX-mousePX)*TWO_PI/width; } //------------------------- void keyPressed(){ if(key>='1' && key<='9') water.flowDecay = 0.5+(key-'1'+1.5)/20; if(key==' ') water.addMoreWater( 30 ); if(key=='r') water.removeWater(); if(key=='w') water.randomWater( 30 ); if(key=='q') drawTerrain = !drawTerrain; if(key=='a') water.gouraud = !water.gouraud; if(key=='s') water.textureBlend = !water.textureBlend; if(key=='d') water.wireframe = !water.wireframe; if(key=='z') terrain.gouraud = !terrain.gouraud; if(key=='x') terrain.textureBlend = !terrain.textureBlend; if(key=='c') terrain.wireframe = !terrain.wireframe; if(key=='t') water = new Water( terrain = new Terrain(64) , 0 ); } //#########################