/*A building with gently curving sides.*/ SIZE = 1.0; FLOORS = 42;//greater than 5 //textures win = new UniformTexture(); win.diffuseColor.setRGB(0.5,0.5,0.5); win.specularity = 0.4f; win.shininess = 1.0f; al = new UniformTexture(); al.diffuseColor.setRGB(0.6,0.6,0.6); top = new UniformTexture(); top.diffuseColor.setRGB(0.8,0.75,0.7); pillar = new UniformTexture(); pillar.diffuseColor.setRGB(0.7,0.4,0.4); //adjust variables FLOORS = FLOORS-5; //bottom c = new Cylinder(3*SIZE,0.2*SIZE,0.2*SIZE,1.0f); c.setTexture(pillar, pillar.getDefaultMapping(c)); for (i=-16;i<16;i++) { x = (i+0.5)*SIZE; z = 18+6-6*(i+0.5)*(i+0.5)/16.0/16.0; z = z*SIZE; box = new Cube(SIZE,SIZE*3,z-3*SIZE); box.setTexture(win, win.getDefaultMapping(box)); pos = new Vec3(x,SIZE*1.5,0); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); if (i%3==0) { pos = new Vec3(i*SIZE,SIZE*1.5,z/2-0.5*SIZE); script.addObject(c, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(i*SIZE,SIZE*1.5,-z/2+0.5*SIZE); script.addObject(c, new CoordinateSystem(pos, 0,0,0)); } } for (i=-9;i<9;i++) { x = (i+0.5)*SIZE; z = 32+4-4*(i+0.5)*(i+0.5)/9.0/9.0; z = z*SIZE; box = new Cube(SIZE,SIZE*3,z-3*SIZE); box.setTexture(win, win.getDefaultMapping(box)); pos = new Vec3(0,SIZE*1.5,x); script.addObject(box, new CoordinateSystem(pos, 0,90,0)); if (i%3==0) { pos = new Vec3(z/2-0.5*SIZE,SIZE*1.5,i*SIZE); script.addObject(c, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(-z/2+0.5*SIZE,SIZE*1.5,i*SIZE); script.addObject(c, new CoordinateSystem(pos, 0,0,0)); } } //main faces p = new Vec3(0,3*SIZE,0); for (i=-16;i<16;i++) { x = (i+0.5)*SIZE; z = 18+6-6*(i+0.5)*(i+0.5)/16.0/16.0; z = z*SIZE; //windows box = new Cube(SIZE,SIZE*FLOORS,z); box.setTexture(win, win.getDefaultMapping(box)); pos = new Vec3(x,SIZE*FLOORS/2,0); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,0,0)); //horizontals for (j=0;j<=FLOORS;j++) { box = new Cube(SIZE,SIZE*0.2,z+0.1*SIZE); box.setTexture(al, al.getDefaultMapping(box)); pos = new Vec3(x,SIZE*j,0); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,0,0)); } //verticals x = i*SIZE; if (i>0) x = (i+1)*SIZE; box = new Cube(0.2*SIZE,SIZE*FLOORS+0.7*SIZE,z+0.2*SIZE); box.setTexture(al, al.getDefaultMapping(box)); pos = new Vec3(x,SIZE*FLOORS/2,0); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,0,0)); if (i==-1) { pos = new Vec3(-x,SIZE*FLOORS/2,0); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,0,0)); } } //side faces for (i=-9;i<9;i++) { x = (i+0.5)*SIZE; z = 32+4-4*(i+0.5)*(i+0.5)/9.0/9.0; z = z*SIZE; box = new Cube(SIZE,SIZE*FLOORS,z); box.setTexture(win, win.getDefaultMapping(box)); pos = new Vec3(0,SIZE*FLOORS/2,x); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,90,0)); //horizontals for (j=0;j<=FLOORS;j++) { box = new Cube(SIZE,SIZE*0.2,z+0.1*SIZE); box.setTexture(al, al.getDefaultMapping(box)); pos = new Vec3(0,SIZE*j,x); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,90,0)); } //verticals x = i*SIZE; if (i>0) x = (i+1)*SIZE; box = new Cube(0.2*SIZE,SIZE*FLOORS+0.7*SIZE,z+0.2*SIZE); box.setTexture(al, al.getDefaultMapping(box)); pos = new Vec3(0,SIZE*FLOORS/2,x); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,90,0)); if (i==-1) { pos = new Vec3(0,SIZE*FLOORS/2,-x); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,90,0)); } } //top box = new Cube(28*SIZE,2*SIZE,18*SIZE); box.setTexture(top, top.getDefaultMapping(box)); pos = new Vec3(0,(FLOORS+1)*SIZE,0); script.addObject(box, new CoordinateSystem(pos.plus(p), 0,0,0));