/*A building with a slashed top, inspired by one in Chicago.*/ FLOORS = 75; SIZE = 1.0; r = new Random(2010); TriangleMesh cubeMesh(double x, double y, double z, double cut) { //an example cube triangle mesh x2 = x - cut; z2 = z - cut*2; vertices = new Vec3[8]; // 8 vertices + 6 faces vertices[0] = new Vec3(0.0, 0.0, -z/2.0); vertices[1] = new Vec3(x, 0.0, -z/10.0);// vertices[2] = new Vec3(x2, y, -z2/10.0);// vertices[3] = new Vec3(0.0, y, -z2/2.0); vertices[4] = new Vec3(0.0, 0.0, z/2.0); vertices[5] = new Vec3(x, 0.0, z/10.0);// vertices[6] = new Vec3(x2, y, z2/10.0);// vertices[7] = new Vec3(0.0, y, z2/2.0); //triangular faces int[][] faces = {{ 0, 3, 2}, { 0, 2, 1}, { 0, 1, 5}, { 0, 5, 4}, { 0, 4, 7}, {0, 7, 3}, { 6, 5, 1}, { 6, 1, 2}, { 6, 2, 3}, { 6, 3, 7}, { 6, 7, 4}, {6, 4, 5}}; mesh = new TriangleMesh(vertices, faces); mesh.setSmoothingMethod(0); return(mesh); } TriangleMesh topMesh(double x, double y, double z, double cut) { //an example cube triangle mesh x2 = x - cut; z2 = z - cut*2; vertices = new Vec3[8]; // 8 vertices + 6 faces vertices[0] = new Vec3(0.0, 0.0, -z/2.0); vertices[1] = new Vec3(x, 0.0, -z/10.0);// vertices[2] = new Vec3(x2, y, -z2/10.0);// vertices[3] = new Vec3(0.0, y/10.0, -z2/2.0); vertices[4] = new Vec3(0.0, 0.0, z/2.0); vertices[5] = new Vec3(x, 0.0, z/10.0);// vertices[6] = new Vec3(x2, y, z2/10.0);// vertices[7] = new Vec3(0.0, y/10.0, z2/2.0); //triangular faces int[][] faces = {{ 0, 3, 2}, { 0, 2, 1}, { 0, 1, 5}, { 0, 5, 4}, { 0, 4, 7}, {0, 7, 3}, { 6, 5, 1}, { 6, 1, 2}, { 6, 2, 3}, { 6, 3, 7}, { 6, 7, 4}, {6, 4, 5}}; mesh = new TriangleMesh(vertices, faces); mesh.setSmoothingMethod(0); return(mesh); } //textures top = new UniformTexture(); top.diffuseColor.setRGB(0.552, 0.6, 0.54); glass = new Texture[3]; for (i=0; i<3; i++) { k = 0.7 + 0.3*i/2.0; glass[i] = new UniformTexture(); glass[i].diffuseColor.setRGB(0.644*k, 0.9*k, 0.63*k); glass[i].specularColor.setRGB(0.644*k, 0.7*k, 0.63*k); glass[i].shininess = 1.0f; glass[i].specularity = 0.3f; } m = cubeMesh(8*SIZE, 1.0*SIZE, 20*SIZE, 0.0); m.setTexture(top, top.getDefaultMapping(m)); ct = cubeMesh(8*SIZE, 0.1*SIZE, 20*SIZE, 0.1*SIZE); ct.setTexture(top, top.getDefaultMapping(ct)); for (i=0; i