rendered paste body ps.println("#declare half"+name+" = union {"); for(int y = 1; y < (height-1); y++) { for(int x = 1; x < (width-1); x++) { if(pixel[y][x].isSolid()) { ps.println("\tmesh2 {"); ps.println("\t\tvertex_vectors {"); ps.println("\t\t\t9,"); // D7 c6 C5 // // d8 T0 b4 <= thickness // // A1 a2 B3 double T = pixel[y][x].thickness; double A = ((!pixel[y][x-1].isSolid()) || (!pixel[y-1][x-1].isSolid()) || (!pixel[y-1][x].isSolid())) ? 0.0 : ((pixel[y][x].thickness+pixel[y][x-1].thickness+pixel[y-1][x-1].thickness+pixel[y-1][x].thickness) / 4); double B = ((!pixel[y-1][x].isSolid()) || (!pixel[y-1][x+1].isSolid()) || (!pixel[y][x+1].isSolid())) ? 0.0 : ((pixel[y][x].thickness+pixel[y-1][x].thickness+pixel[y-1][x+1].thickness+pixel[y][x+1].thickness) / 4); double C = ((!pixel[y][x+1].isSolid()) || (!pixel[y+1][x+1].isSolid()) || (!pixel[y+1][x].isSolid())) ? 0.0 : ((pixel[y][x].thickness+pixel[y][x+1].thickness+pixel[y+1][x+1].thickness+pixel[y+1][x].thickness) / 4); double D = ((!pixel[y+1][x].isSolid()) || (!pixel[y+1][x-1].isSolid()) || (!pixel[y][x-1].isSolid())) ? 0.0 : ((pixel[y][x].thickness+pixel[y+1][x].thickness+pixel[y+1][x-1].thickness+pixel[y][x-1].thickness) / 4); double a = (!pixel[y-1][x].isSolid()) ? 0.0 : ((pixel[y][x].thickness+pixel[y-1][x].thickness) / 2); double b = (!pixel[y][x+1].isSolid()) ? 0.0 : ((pixel[y][x].thickness+pixel[y][x+1].thickness) / 2); double c = (!pixel[y+1][x].isSolid()) ? 0.0 : ((pixel[y][x].thickness+pixel[y+1][x].thickness) / 2); double d = (!pixel[y][x-1].isSolid()) ? 0.0 : ((pixel[y][x].thickness+pixel[y][x-1].thickness) / 2); ps.println("\t\t\t<0,"+T+",0>,"); ps.println("\t\t\t<-1,"+A+",-1>,"); ps.println("\t\t\t<0,"+a+",-1>,"); ps.println("\t\t\t<1,"+B+",-1>,"); ps.println("\t\t\t<1,"+b+",0>,"); ps.println("\t\t\t<1,"+C+",1>,"); ps.println("\t\t\t<0,"+c+",1>,"); ps.println("\t\t\t<-1,"+D+",1>,"); ps.println("\t\t\t<-1,"+d+",0>"); ps.println("\t\t\t}"); ps.println("\t\tface_indices {"); ps.println("\t\t\t8,"); ps.println("\t\t\t<0,1,2>,"); ps.println("\t\t\t<0,2,3>,"); ps.println("\t\t\t<0,3,4>,"); ps.println("\t\t\t<0,4,5>,"); ps.println("\t\t\t<0,5,6>,"); ps.println("\t\t\t<0,6,7>,"); ps.println("\t\t\t<0,7,8>,"); ps.println("\t\t\t<0,8,1>"); ps.println("\t\t\t}"); ps.println("\t\ttexture {\tpigment {\trgb " + getRGBVector(x, y) + "\t}\tfinish\t{\tambient 0.25\tbrilliance 4\tdiffuse 0.5\tmetallic\tspecular 0.80\troughness 1/80\treflection 0.3}\t}"); ps.println("\t\ttranslate <"+2*x+",0,"+2*y+">"); ps.println("\t\t}"); } } } ps.println("\tscale <1, 1, 1/2>"); ps.println("\ttranslate <-19.5, 0, -17.5>"); ps.println("\ttranslate x * " + offset); ps.println("\t}"); ps.println("union { object { half"+name+" } object { half"+name+" scale <1,-1,1> } }");