//desert towers, a former complex of dorms at BYU. Number and arrangement of buildings easily changed. SIZE = 1.0;//equal to 10 feet FLOORS = 7; TORAD = Math.PI/180; //textures brick = new UniformTexture(); brick.diffuseColor.setHSV(35,0.6f,0.6f); win = new UniformTexture(); win.diffuseColor.setRGB(0.3,0.3,0.3); white = new UniformTexture(); win.specularity = 0.5f; win.shininess = 1.0f; white.diffuseColor.setHSV(50,0.3f,0.8f); blue = new UniformTexture(); blue.diffuseColor.setHSV(235,0.5f,0.5f); void tower(Vec3 pos, double angle) { //make a single tower, center of base at pos, rotated angle var box, c; Vec3 vv; double x,y,z, offset; int i,j; Mat4 th, mpos; th = Mat4.yrotation(angle*TORAD); mpos = Mat4.translation(pos.x, pos.y, pos.z); //first floor box = new Cube(8*SIZE,1.5*SIZE,4*SIZE); box.setTexture(win, win.getDefaultMapping(box)); vv = new Vec3(0,0.75*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th); rr.transformOrigin(mpos); script.addObject(box, rr); box = new Cube(1.25*SIZE,1.5*SIZE,4.05*SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); vv = new Vec3(-3.5*SIZE,0.75*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(3.5*SIZE,0.75*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(2.25*SIZE,0.75*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); box = new Cube(3.9*SIZE,0.3*SIZE,4.05*SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); vv = new Vec3(-0.95*SIZE,0.15*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); box = new Cube(4.6*SIZE,0.6*SIZE,4.05*SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); vv = new Vec3(-0.6*SIZE,1.15*SIZE,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); //columns c = new Cube(0.35*SIZE,1.5*SIZE,0.35*SIZE); c.setTexture(white, white.getDefaultMapping(c)); for (i=-2;i<=2;i++) { z = 2.7*SIZE; vv = new Vec3(i*2.0*SIZE,0.75*SIZE,z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(c, rr); vv = new Vec3(i*2.0*SIZE,0.75*SIZE,-z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(c, rr); } //upper floors offset = 1.5*SIZE;//height of first floor box = new Cube(9.9*SIZE,(FLOORS-1)*SIZE,6*SIZE); box.setTexture(win, win.getDefaultMapping(box)); vv = new Vec3(0,(FLOORS-1)/2+offset,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); box = new Cube(0.5*SIZE,(FLOORS-1)*SIZE,6.1*SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); for (i=-4;i<5;i++) { vv = new Vec3(i*SIZE,(FLOORS-1)/2+offset,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); } //ends box = new Cube(0.25*SIZE,(FLOORS-1)*SIZE,2.1*SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); double x = 4.875*SIZE; double z = 2*SIZE; vv = new Vec3(x,(FLOORS-1)/2+offset,z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(x,(FLOORS-1)/2+offset,-z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(-x,(FLOORS-1)/2+offset,z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(-x,(FLOORS-1)/2+offset,-z); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); box = new Cube(0.25*SIZE,FLOORS-1,SIZE); box.setTexture(brick, brick.getDefaultMapping(box)); vv = new Vec3(x,(FLOORS-1)/2+offset,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); vv = new Vec3(-x,(FLOORS-1)/2+offset,0); rr = new CoordinateSystem(vv, 0,0,0); rr.transformCoordinates(th);rr.transformOrigin(mpos); script.addObject(box, rr); //horizontals box = new Cube(9.95*SIZE,0.4*SIZE,6.05*SIZE); box.setTexture(white, white.getDefaultMapping(box)); for(i=1;i