float[][] land; int[][] river; dir left=new dir(-1,0,0); dir right=new dir(1,0,1); dir up=new dir(0,-1,2); dir down=new dir(0,1,3); dir[] dirs; int[] pal; int cross=0; int palette=0; int SIZE=64; float SCALE=1.0; int HSCALE=3; void keyPressed() { if(cross==1) cross=0; else cross=1; } void setup() { size(500,250); dirs=new dir[4]; dirs[0]=left; dirs[1]=right; dirs[2]=up; dirs[3]=down; land=new float[SIZE][SIZE]; pal=new int[2048]; for(int i=0;i<256;i++) { // pal[i]=color(0,0,100); pal[i]=color(0,128+(i/2),0); pal[i+256]=color(i/2,255-(i/2),i/2); pal[i+512]=color(128+(i/2),128+(i/2),128+(i/2)); pal[i+768]=color(255,255,255); /* pal[i+768]=color(i-94,365-i,i-224); pal[i+1024]=color(162+i,109+i,32+i); pal[1280+i]=color(255,255,255); pal[1536+i]=color(255,255,255);*/ } palette=800; initland(); split(0,0,SIZE-1,SIZE-1); drawland3d(); } void mousePressed() { initland(); split(0,0,SIZE-1,SIZE-1); } void loop() { background(color(0,0,0)); // drawland(); drawland3d(); } void drawland3d() { float maxheight=0.0; for(int x=0;xmaxheight) maxheight=land[x][y]; } } push(); if(cross==1) { translate((width/2.0)-20,height/2.0,-100); } else { translate((width/2.0)+20,height/2.0,-100); } rotateY((0.0-((float)mouseX/(float)width)+0.5)*PI); // rotateY(0.1); rotateX(PI/2.3); rotateX((((float)mouseY/(float)width)-0.5)*(PI/2)); for(int y=0;y1280) c=1280; fill(pal[c]); } vertex(xp,yp,land[x][y]*65); vertex(xp,yp+HSCALE,land[x][y+1]*65); } endShape(); } fill(color(0,0,255,64)); beginShape(QUADS); vertex(0-(SIZE/2)*HSCALE,0-(SIZE/2)*HSCALE,0); vertex(0-(SIZE/2)*HSCALE,(SIZE/2)*HSCALE,0); vertex((SIZE/2)*HSCALE,(SIZE/2)*HSCALE,0); vertex((SIZE/2)*HSCALE,0-(SIZE/2)*HSCALE,0); endShape(); pop(); BImage LeftEye=copy(); background(color(0,0,0)); push(); translate(width/2.0,height/2.0,-100); rotateY((0.0-((float)mouseX/(float)width)+0.5)*PI); // rotateY(0.1); rotateX(PI/2.3); rotateX((((float)mouseY/(float)width)-0.5)*(PI/2)); for(int y=0;y1280) c=1280; fill(pal[c]); } vertex(xp,yp,land[x][y]*65); vertex(xp,yp+HSCALE,land[x][y+1]*65); } endShape(); } fill(color(0,0,255,64)); beginShape(QUADS); vertex(0-(SIZE/2)*HSCALE,0-(SIZE/2)*HSCALE,0); vertex(0-(SIZE/2)*HSCALE,(SIZE/2)*HSCALE,0); vertex((SIZE/2)*HSCALE,(SIZE/2)*HSCALE,0); vertex((SIZE/2)*HSCALE,0-(SIZE/2)*HSCALE,0); endShape(); pop(); BImage RightEye=copy(); BImage RightEyeAlpha=new BImage(width,height); for(int x=0;x2) { split(x1,y1,xmid,ymid); split(x1,ymid,xmid,y2); split(xmid,y1,x2,ymid); split(xmid,ymid,x2,y2); } } void psplit(int x1, int y1, int x2, int y2) { println("Split: " + x1 + "," + y1 + " " + x2+","+y2); } class dir { int x,y,v; dir(int _x, int _y, int _v) { x=_x; y=_y; v=_v;} }