/*A building based loosely on the Manchester YSA building in Manchester, England. Spire optional*/ SIZE = 1.0; FLOORS = 10; SPIRE = true; //textures tan = new UniformTexture(); tan.diffuseColor.setRGB(0.72,0.63,0.36); window = new UniformTexture(); window.diffuseColor.setRGB(0.5,0.5,0.5); window.shininess = 1.0f; window.specularity = 0.5f; light = new UniformTexture(); light.diffuseColor.setRGB(.75,.75,.75); dark = new UniformTexture(); dark.diffuseColor.setRGB(0.45,0.45,0.5); //first floor box = new Cube(SIZE,0.2*SIZE,3.8*SIZE);//white trim box.setTexture(light,light.getDefaultMapping(box)); pos = new Vec3(-3.1*SIZE,0.95*SIZE,-0.1*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(6.5*SIZE,SIZE,4.4*SIZE); box.setTexture(window,window.getDefaultMapping(box)); pos = new Vec3(-0.1*SIZE,0.5*SIZE,-0.2*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(0.2*SIZE,SIZE,1*SIZE);//spire side box.setTexture(tan,tan.getDefaultMapping(box)); x = -3.3*SIZE; pos = new Vec3(x,0.5*SIZE,1.2*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(x,0.5*SIZE,-0.4*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(x,0.5*SIZE,-1.6*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(6.7*SIZE,SIZE,0.4*SIZE); box.setTexture(tan,tan.getDefaultMapping(box)); pos = new Vec3(-0.1*SIZE,0.5*SIZE,-2.3*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(6*SIZE,0.3*SIZE,4.5*SIZE);//front of first floor box.setTexture(tan,tan.getDefaultMapping(box)); pos = new Vec3(0.2*SIZE,0.15*SIZE,-0.2*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(0.2*SIZE,0.85*SIZE,-0.2*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(0.4*SIZE,SIZE,4.5*SIZE); box.setTexture(tan, tan.getDefaultMapping(box)); for (i=0;i<8;i++) { pos = new Vec3(0.8*i*SIZE-SIZE*2.6,0.5*SIZE,-0.2*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); } //upper floors box = new Cube(6.7*SIZE,(FLOORS-1)*SIZE,5*SIZE);//windows box.setTexture(window, window.getDefaultMapping(box)); pos = new Vec3(-0.15*SIZE,FLOORS*SIZE/2.0+SIZE*0.5,0); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(6.5*SIZE,0.3*SIZE,5.1*SIZE);//horizontals for front and back box.setTexture(tan, tan.getDefaultMapping(box)); for (i=1;i<=FLOORS;i++) { pos = new Vec3(0,i*SIZE+0.15*SIZE,0); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); } box = new Cube(0.5*SIZE,SIZE*(FLOORS-1),5.1*SIZE);//verticals for front and back box.setTexture(tan, tan.getDefaultMapping(box)); for (i=-2;i<=3;i++) { pos = new Vec3(i*SIZE,SIZE*FLOORS/2.0+SIZE*0.5,0); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); } //spire side box = new Cube(0.6*SIZE,0.3*SIZE,2.8*SIZE); box.setTexture(tan, tan.getDefaultMapping(box)); for (i=1;i<=FLOORS;i++) { pos = new Vec3(-3.3*SIZE,i*SIZE+0.15*SIZE,-1.15*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); } box = new Cube(0.6*SIZE,(FLOORS-1)*SIZE,SIZE);//verticals box.setTexture(tan, tan.getDefaultMapping(box)); pos = new Vec3(-3.3*SIZE,FLOORS*SIZE/2.0+0.5*SIZE,-1.15*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(0.6*SIZE,(FLOORS-1)*SIZE,0.6*SIZE); box.setTexture(tan, tan.getDefaultMapping(box)); pos = new Vec3(-3.3*SIZE,FLOORS*SIZE/2.0+0.5*SIZE,-2.25*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(-3.3*SIZE,FLOORS*SIZE/2.0+0.5*SIZE,-0.05*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); //not spire side y = SIZE*(FLOORS-0.3); box = new Cube(0.8*SIZE,y,4.5*SIZE); box.setTexture(tan,tan.getDefaultMapping(box)); pos = new Vec3(3.6*SIZE,y/2.0,0); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); //corner box = new Cube(0.6*SIZE,SIZE*(FLOORS-0.4),0.2*SIZE);//white bars box.setTexture(light, light.getDefaultMapping(box)); pos = new Vec3(-2.8*SIZE,SIZE*FLOORS/2.0+SIZE*0.8,2.5*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(-2.8*SIZE,SIZE*FLOORS/2.0+SIZE*0.8,-2.5*SIZE);//one in back script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(-3.5*SIZE,SIZE*FLOORS/2.0+SIZE*0.8,1.5*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,90,0)); box = new Cube(0.1*SIZE,SIZE*(FLOORS-0.7),0.5*SIZE); box.setTexture(tan, tan.getDefaultMapping(box)); pos = new Vec3(-3.5*SIZE,SIZE*FLOORS/2.0+SIZE*0.65,2.05*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(SIZE,0.2*SIZE,1.3*SIZE);//top of corner box.setTexture(tan, tan.getDefaultMapping(box)); pos = new Vec3(-3.05*SIZE,SIZE*FLOORS+SIZE*0.35,1.9*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(1.35*SIZE,0.5*SIZE,2.25*SIZE); //window frames box.setTexture(dark, dark.getDefaultMapping(box)); box2 = new Cube(1.4*SIZE,0.3*SIZE,0.3*SIZE); box2.setTexture(tan,tan.getDefaultMapping(box)); for (i=1;i<=FLOORS;i++) { pos = new Vec3(-2.85*SIZE,i*SIZE+0.15*SIZE,2.4*SIZE); script.addObject(box2, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(-2.85*SIZE,i*SIZE+0.1*SIZE,1.4*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); } x = -2.9*SIZE;//gray windows box = new Cube(1.5*SIZE,SIZE*(FLOORS-0.7),0.2*SIZE); box.setTexture(dark, dark.getDefaultMapping(box)); pos = new Vec3(x,SIZE*FLOORS/2.0+SIZE*0.7,0.3*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(x,SIZE*FLOORS/2.0+SIZE*0.7,1.1*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); box = new Cube(1.5*SIZE,0.2*SIZE,1.0*SIZE);//top, bottom box.setTexture(dark,dark.getDefaultMapping(box)); pos = new Vec3(x,SIZE*FLOORS+0.25*SIZE,0.7*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); pos = new Vec3(x,1.1*SIZE,0.7*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); if (SPIRE) { box = new Cube(0.2*SIZE,0.4*SIZE,0.6*SIZE); box.setTexture(dark,dark.getDefaultMapping(box)); pos = new Vec3(-3.5*SIZE,SIZE*(FLOORS+0.8),1.5*SIZE); script.addObject(box, new CoordinateSystem(pos, 0,0,0)); cyl = new Cylinder(3*SIZE,0.025*SIZE,0.025*SIZE,1.0f); cyl.setTexture(dark,dark.getDefaultMapping(box)); pos = new Vec3(-3.7*SIZE,SIZE*(FLOORS+1),1.5*SIZE); script.addObject(cyl, new CoordinateSystem(pos, 0,0,0)); }