/* POVRAY PROGRAM TO CREATE THE ELLIPSOIDS VERSION OF THE UNIVERSAL TERRESTRIAL DWELLING By ROBERT JOHN MORTON YE572246C COMMAND LINE: povray -visual DirectColor ellipsoid.pov +W640 +H480 set width and height of picture in /etc/povray/3.6/povray.ini */ #include "colors.inc" #include "shapes.inc" #include "textures.inc" #include "metals.inc" #include "stones.inc" #include "glass.inc" // CAMERA ---------------------------------------------------------------- global_settings { max_trace_level 256 } // max possible is 256 #declare r = 1.5; #declare h = 300; #declare l = h * r; #declare q = 150; camera { // establish a camera to view the scene location <0, h, l> look_at <0, -0.5, 0> // camera is looking at a point a little to the right and in front of the origin angle 1 // the aperture angle. This affects the zooming of the scene. } // LIGHTING -------------------------------------------------------------- // 1) Simulate the sun light_source { // cylinder light <200, 1000, 800> // located quite high, well forward and a little to the left color White // white light cylinder // confined to a cylindrical beam radius 70 // of radius 30 units diameter at full intensity falloff 200 // falling off to zero brightness at 70 units diameter area_light <1, 0, 0>, <0, 0, 1>, 20, 20 // lighting element is a 20 x 20 arral of pixels adaptive 1 // the normal of which is determined by the vectors jitter // adaptive = minimise number of test rays required point_at <0, 0, 0> // the light beam is aimed at the co-ordinate origin } // jitter softens shadows light_source { // cylinder light <200, 1000, 800> // located quite high, well forward and a little to the left color rgb <.8,.7,.6> // white light cylinder // confined to a cylindrical beam radius 70 // of radius 30 units diameter at full intensity falloff 200 // falling off to zero brightness at 70 units diameter area_light <1, 0, 0>, <0, 0, 1>, 20, 20 // lighting element is a 20 x 20 arral of pixels adaptive 1 // the normal of which is determined by the vectors jitter // adaptive = minimise number of test rays required point_at <0, 0, 0> // the light beam is aimed at the co-ordinate origin } // jitter softens shadows // 2) simulate light from the horizon light_source { < 0, 50, 500> color rgb <.6, .8, 1> } // ordinary point source of horizon light light_source { < 433, 50, -250> color rgb <.6, .8, 1> } // ordinary point source of horizon light light_source { <-433, 50, -250> color rgb <.6, .8, 1> } // ordinary point source of horizon light // BACKGROUND ------------------------------------------------------------ #declare LandArea = texture { pigment { agate turbulence 1 lambda 1.5 omega .8 octaves 8 color_map { [0.00 color rgb <.5, .25, .15>] [0.33 color rgb <.1, .5, .4>] [0.86 color rgb <.6, .3, .1>] [1.00 color rgb <.5, .25, .15>] } } } plane { y, -4 // create a ground plane texture { // define its texture that comprises: pigment { color rgb <0.8, 1.0, 0.5> // colour field-green rgb <0.8, 1.0, 0.5> } finish { // with surface characteristics: diffuse 0.2 // diffusion ambient 0.3 // effective ambient lighting (brightness) } } } sky_sphere { pigment { gradient y color_map { [(1-cos(radians( 30)))/2 color White] [(1-cos(radians(120)))/2 color Blue] } scale 2 translate -1 } } /* This is a new version of the ellipsoid with a single skin plus ellipical flanges #declare p = 0.7; // major colour level #declare q = 0.5; // minor colour level #declare s = 0.3; // lower intermediate colour #declare w = 0.6; // higher intermediate colour #declare h = 0.4; // 'absent' component #declare RED = texture { pigment { agate agate_turb 0.5 color_map { [0.00 color ] // red [s color ] // cyan [w color ] // yellow [1.00 color ] // red } } finish { phong 0.8 } } #declare GREEN = texture { pigment { agate agate_turb 0.5 color_map { [0.00 color ] // green [s color ] [w color ] [1.00 color ] // green } } finish { phong 0.8 } } #declare BLUE = texture { pigment { agate agate_turb 0.5 color_map { [0.00 color ] // blue [s color ] [w color ] [1.00 color ] // blue } } finish { phong 0.8 } } */ /* SPECIAL TEXTURES USED IN THIS PROJECT ---------------------------------------------------------- Shell Deep Magenta 0.53, 0.40, 0.80 Shell Light Magenta 0.53, 0.47, 0.80 (magentaish grey) Shell Light Green 0.53, 0.80, 0.47 (yellowish grey) Shell Light Pink 0.80, 0.53, 0.47 Shell Light Brown 0.80, 0.47, 0.53 */ #declare GREEN = texture { pigment { color rgb <0.50, 0.52, 0.49> } // grey with a suggestion of light green finish { phong 0.8 ambient 0.5 } } #declare RED = texture { pigment { color rgb <0.57, 0.55, 0.53> } // grey with a hint of red finish { phong 0.8 ambient 0.5 } } #declare YELLOW = texture { pigment { color rgb <0.90, 0.86, 0.32> } // crop corn colour finish { phong 0.8 ambient 0.4 } } #declare CYAN = texture { pigment { color rgb <0.58, 0.55, 0.30> } // crop ploughed colour finish { phong 0.8 ambient 0.4 } } #declare ROAD = texture { pigment { colour rgb <0.52, 0.49, 0.50> } // light grey tarmac. finish { phong 0.8 ambient 0.4 } } #declare BLUE = texture { pigment { color rgb <0.38671875, 0.625, 0.73828125> } // water blue finish { diffuse 0.3 ambient 0.3 phong .95 } } #declare GLASS1 = texture { pigment { color Col_Glass_General } finish { F_Glass8 } } #declare GLASS2 = texture { pigment { color Col_Glass_Green } finish { F_Glass8 } } // OBJECTS -------------------- Dimensions in Metres ------------------------- #declare pf = 2.5; // radius of petal floor 2.5 #declare pr = 3.5; // horizontal radius of the petal ellipsoids #declare ar = 0.5; // aspect ratio of the ellipse #declare vp = pr * ar; // vertical half-height of petal ellipsoid #declare dm = RED; // dark metal: surface texture of the ninho de amor #declare lm = BLUE; // light metal: #declare iw = RED; // colour and texture for interior walls #declare gl = T_Glass4; // type of glass used for windows #declare s = 1.4433756729740644112728719512549; //half-side of the hexagon /* CREATE THE FLANGES FOR THE EDGES OF THE ELLIPTICAL CUT-OUTS The union below is of two thin co-axial cylindrical flanges 2 mm apart and each 4 mm thick. The 2 mm separation is for a joining gasket of fibre or cork. The third cylinder is used to cut out the centre to form a thin flange. The whole object is then squashed to half its size in the y-dimension only. This makes the flange 10 cm wide on the major (horizontal) axis, reducing to 5 cm wide on the minor (vertical) axis. */ #declare flange0 = difference { // 10 cm x 7 m DIAMETER ELLIPTICAL FLANGE union { cylinder { // main flange <0, 0, -.005>, <0, 0, -.001>, 3.5 // by first making a 5 metre diameter cylinder } cylinder { // mating flange <0, 0, +.001>, <0, 0, +.005>, 3.5 // by first making a 5 metre diameter cylinder } } cylinder { <0, 0, -.006>, <0, 0, +.006>, 3.3 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent } box { <-1, -4, -.006>, <+1, +4, +.006> pigment { color rgbt<1,1,1,1> } // make it completely transparent } } #declare flange1 = difference { // 10 cm X 4 m ELLIPTICAL FLANGE union { cylinder { // main flange <0, 0, -.005>, <0, 0, -.001>, 2.45 // by first making a 5 metre diameter cylinder } cylinder { // mating flange <0, 0, +.001>, <0, 0, +.005>, 2.45 // by first making a 5 metre diameter cylinder } } cylinder { <0, 0, -.006>, <0, 0, +.006>, 2.25 // ???by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent } translate <0,0,pf> // move the flange to its radial position } #declare flange2 = union { difference { cylinder { // main flange <0, 0, 0>, <0, -.2, 0>, 2.206 // by first making a 5 metre diameter cylinder hollow } cylinder { // mating flange <0, .001, 0>, <0, -.201, 0>, 2.202 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent hollow } } difference { cylinder { // main flange <0, 0, 0>, <0, -.2, 0>, 2.198 // by first making a 5 metre diameter cylinder hollow } cylinder { // mating flange <0, .001, 0>, <0, -.201, 0>, 2.194 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent hollow } } translate <0, 2.7221315177632398883866023128624, 0> //translate to touch ellipse } #declare flange3 = union { difference { cylinder { // main flange <0, 0, 0>, <0, -.2, 0>, 1.006 // by first making a 5 metre diameter cylinder hollow } cylinder { // mating flange <0, .001, 0>, <0, -.201, 0>, 1.002 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent } } difference { cylinder { // main flange <0, 0, 0>, <0, -.2, 0>, 0.998 // by first making a 5 metre diameter cylinder hollow } cylinder { // mating flange <0, .001, 0>, <0, -.201, 0>, 0.994 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent } } translate <0, 3.3541019662496845446137605030969, 0> //translate to touch ellipse } #declare flange4 = difference { cylinder { // main flange <0, 0, 0>, <0, -.1, 0>, 0.506 // by first making a 5 metre diameter cylinder hollow } cylinder { // mating flange <0, .001, 0>, <0, -.1005, 0>, 0.502 // by first making a 5 metre diameter cylinder pigment { color rgbt<1,1,1,1> } // make it completely transparent } translate <0, 1.7320508075688772935274463415055, 0> //translate to touch ellipse } // CREATE THE BASIC ELLIPSOID #declare a = union { // CREATE BASIC ELLIPSOID SHAPE FOR ACCOMMODATION MODULES sphere { <0,0,0>, pr hollow } // outer surface object { flange2 } // outer circle of the roof object { flange3 } // inner circle of the roof round skylight #declare k = 0; #while(k<360) // small elliptical flanges marking the hexagon object { flange1 rotate <0,k,0> } #declare k=k+60; #end #declare k = 30; #while(k<=180) // large elliptical flanges of longitude object { flange0 rotate <0,k,0> } #declare k=k+60; #end scale <1, ar, 1> // squash it vertically to creat ellipsoid } // CREATE A TRANSPARENT GENERIC PETAL TO ILLUSTRATE THE FLANGING #declare b = union { object { flange2 } // outer circle of the roof object { flange3 } // inner circle of the roof round skylight #declare k = 0; #while(k<360) // small elliptical flanges marking the hexagon object { flange1 rotate <0,k,0> } #declare k=k+60; #end #declare k = 30; #while(k<=180) // large elliptical flanges of longitude object { flange0 rotate <0,k,0> } #declare k=k+60; #end texture { lm } // giving it the texture of light metal } #declare fs = union { // CREATE FLANGING STRUCTURE sphere { // outer surface <0,0,0>, pr hollow texture { gl } } object { b } scale <1, ar, 1> // squash it vertically to creat ellipsoid } // ------------------------------ CUTTING UP THE PETAL UNIT --------------------------------- // THE VERTICAL (OR PERIPHERAL) PANELS #declare hs = object { // HEXAGONAL SLICE a clipped_by { box { <-4,-2, -2.5>, < 4, 2, -7.5> } } } #declare cpgl = object { // CORNER PANEL hs rotate < 0, 60, 0> // correct! clipped_by { box { <-4,-2, -2.5>, < 4, 2, -7.5> } } texture { gl } // rotate<0,-30,0> //explode // translate<0,0,-1.25> //explode // rotate<0, 30,0> //explode } #declare sp = object { // SIDE PANEL hs rotate < 0, 60, 0> clipped_by { box { <-4,-2, 7.5>, < 4, 2, -2.5> } } rotate < 0, -120, 0> clipped_by { box { <-4,-2, 7.5>, < 4, 2, -2.5> } } rotate <0,60,0> clipped_by { box { <0,-3,-4>, <-3, +3, +4> } } // translate<-.125,0,-1.25> //explode } #declare dsp = union { // right-handed double side-panel object { sp texture { lm } } object { sp texture { dm } rotate <180, 180, 0> } } // THE HORIZONTAL (OR ROOF/BASE) PANELS #declare rp = object { // ROOF PANEL (CIRCULAR SEGMENT) difference { object { a clipped_by { cylinder { <0, 0, 0>, <0, 4, 0>, 2.2 } } } cylinder { <0,0,0>, <0,4,0>, 1 pigment { color rgbt<1,1,1,1> } // make it completely transparent } } clipped_by { box { <0,-4,-4>, <4, 4, 4> } } rotate <0, 120, 0> clipped_by { box { <0,-4,-4>, <4, 4, 4> } } // rotate<0,30,0> //explode // translate<0,0,-.5> //explode // rotate<0,-30,0> //explode } #declare rplm = object { rp texture { lm } // giving it the texture of light metal } #declare rpdm = object { rp texture { dm } // giving it the texture of dark metal } // THE FRAME PANEL (HEX ON OUTER EDGE, CIRCULAR ON INNER EDGE #declare fp = object { difference { object { a clipped_by { box { <-4, 0, -2.5>, <+4, 4, +2.5> } } rotate <0,60,0> clipped_by { box { <-4, 0, -2.5>, <+4, 4, +2.5> } } } cylinder { <0, -3, 0>, <0, 3, 0>, 2.2 pigment { color rgbt<1,1,1,1> } } } clipped_by { box { <0,0,-4>, <4,3,4> } } rotate <0,-60,0> clipped_by { box { <-4,0,-4>, <0,3,4> } } // rotate<0,30,0> //explode // translate<0,0,1> //explode // rotate<0,-30,0> //explode } #declare fplm = object { fp texture { lm } // giving it the texture of light metal } #declare fpdm = object { fp texture { dm } // giving it the texture of dark metal } #declare tb = object { // CREATE THE TOP/BOTTOM PANEL OBJECT (SKYLIGHT) a // complete ellipsoidal object clipped_by { // clipped by a 2 metre diameter cylinder cylinder { <0, 1.577>, <0, 1.751, 0>, 1 } } // finish { phong 1 } // and a strong reflective shine } #declare tbgl = object { tb texture { gl } // giving it the texture of glass } #declare tb1 = difference { union { object { tb } object { flange4 } } cylinder { <0,0,0>, <0,4,0>, 0.5 pigment { color rgbt<1,1,1,1> } // make it completely transparent } } #declare tblm = object { tb1 texture { lm } // giving it the texture of light metal } // ------------------------- END OF PANEL CREATION SECTION ------------------------------- // CONSTRUCT THE FLOOR SECTION #declare floor1 = cylinder { <0, 0, 0>, // top centre point <0, -.15, 0>, // base centre point 2.5 // radius of the floor texture { GREEN } // giving it the desired surface texture finish {phong 1} translate <0, -1, 0> // shift it vertically to the floor level of the ellipsoid } // CONSTRUCT THE 'HALF-SECTION' OF AN INTER-MODULE FOOTBRIDGE #declare bridge = box { <0, .01, .75>, <-2.5, -.01, -.75> texture { GREEN } finish {phong 1} translate <-2.5, -1, 0> // move to to the correct floor level } // CONSTRUCT THE STAIRCASE AND SUPPORT CYLINDERS #declare stairs = cylinder { <0, -4, 0>, <0, -.99, 0>, 1 hollow texture { gl } // giving it the desired surface texture finish { phong 0.5 } // and no shine } #declare post = union { cylinder { <0, -4, 0>, <0, -1.01, 0>, .5 hollow } cylinder { <0, -4, 0>, <0, -1.01, 0>, .45 } texture { gl } // giving it the desired surface texture finish { phong 0.5 } // and no shine } // -------------------------- FORM THE INTERIOR WALL STRUCTURE -------------------------------- #declare d = difference { // FORM THE BASIC ELLIPTICAL WALL PANEL cylinder { <0, 0, -.006>, <0, 0, -.010>, 2.45 // by first making a 4.9 metre diameter cylinder scale <1, ar, 1> // then squash it to give it a 2:1 elliptical cross-section } box { <-.5, -1.15, -.005>, <+.5, .85, -.011> // merge in a clear door way 2 metres high by 1 metre wide pigment { color rgbt<1,1,1,1> } // make it completely transparent } } #declare hx = 1.4433756729740644112728719512549; // half-length of hexagon #declare rh = 2.8867513459481288225457439025098; // radial hipotenuse #declare sd = rh + hx; // dist. from centre to mid-point of radial unit #declare dd = union { object { d clipped_by { box { <0, -1.5, -1>, <+hx, +1.5, +1> } } texture { dm } // give it the desired solid surface texture // translate<+.1,0,0> //explode } object { d clipped_by { box { <0, -1.5, -1>, <-hx, +1.5, +1> } } texture { lm } // give it the desired solid surface texture // translate<-.1,0,0> //explode } finish { phong .3 } // make its surface shiny } #declare explode = 0; // 0.75; #declare d0 = object { dd translate <0, 0, pf+explode> } #declare d1 = object { dd rotate <0, 180, 0> translate <0, 0, pf+explode> } #declare d2 = object { // form right-handed end-piece wall unit d clipped_by { box { , <+2.7, +1.5, +1> } } texture { lm } // give it the desired solid surface texture finish { phong .3 } // make its surface shiny translate <+.3, 0, pf+explode> } #declare d3 = object { // form a left-handed end-piece wall unit d clipped_by { box { <-hx, -1.5, -1>, <-2.7, +1.5, +1> } } texture { dm } // give it the desired solid surface texture finish { phong .3 } // make its surface shiny translate <-.3, 0, pf+explode> } // --------------------------- SUB-ASSEMBLIES ----------------------------- #declare frame = union { // HEXAGON/CIRCULAR FRAME ASSEMBLY #declare k = 0; #while( k < 360 ) object { fpdm rotate <0, k, 0> } // a frame panel in dark metal object { fplm rotate <0, k+60, 0> } // a frame panel in light metal #declare k = k + 120; // assembled in pairs every 120 degrees #end } #declare roof = union { // complete roof (or bottom) assembly #declare k = 0; #while( k < 360 ) object { rpdm rotate <0, k, 0> } object { rplm rotate <0, k+60, 0> } #declare k = k + 120; #end } #declare os2s = union { // OUTER SHELL ON TWO SIDES object { dsp rotate <0, 0, 0> } // right-handed double side panel object { cpgl rotate <0, 0, 0> } // first corner-panel window unit object { cpgl rotate <0, 60, 0> } // second corner-panel window unit object { dsp rotate <0, 120, 0> } // right-handed double side panel } #declare iw3s = union { // INNER WALL PANELS ON 3 SIDES OF THE HEXAGON object { d0 } object { d1 rotate <0, 60, 0> } object { d0 rotate <0,120, 0> } object { d3 } object { d2 rotate <0,120, 0> } } #declare bottom = union { object { frame } // frame assembly object { roof } // the 6 roof panels object { tblm } // and light-metal coloured centre panel rotate <180,0,0> // rotated so they are 'upside down' } #declare twa = union { // third-wall assembly object { dsp rotate <0, 0, 0> } // right-handed double side panel object { cpgl rotate <0, 0, 0> } // first corner-panel window unit object { dsp rotate <180, -120, 0> } // left-handed double side panel in centre object { cpgl rotate <0, 60, 0> } // second corner-panel window unit } #declare basic = union { object { floor1 } object { post } } // ------------------------ ASSEMBLE THE HUB AND PETAL UNITS ---------------------- #declare fbf = union { // frame, bottom and floor object { frame } object { bottom } object { floor1 } // flat 5 metre diameter floor } #declare rs = union { // roof and skylight object { roof } object { tbgl } } #declare generic = union { // GENERIC PETAL UNIT object { fbf } // frame assembly, bottom and floor object { rs } // roof and skylight object { post } // 1 metre diameter glass support cylinder #declare k = 0; #while( k < 360 ) object { twa rotate <0,k,0> } #declare k = k + 120; #end } #declare petal = union { // NORMAL PETAL UNIT object { rs } object { frame } object { bottom } // the 6 roof panels + skylight object { iw3s } // inner walls on 3 sides object { os2s } // outer shell on 2 sides object { dsp rotate <180, -120, 0> } // left-handed double side panel in centre object { post } // 1 metre diameter glass support cylinder object { floor1 } rotate <0, 30, 0> // translate <-5, 0, 0> // shift to peripheral position } #declare patio = union { // PATIO UNIT object { fbf } // complete under-shell assembly object { iw3s } // inner walls on 3 sides object { os2s } // outer shell on 2 sides object { post } // 1 metre diameter glass support cylinder object { bridge rotate <0,-30,0>} // half-length inter-module bridge unit rotate <0, 30, 0> // translate <-5, 0, 0> // shift to peripheral position } #declare hub = union { // THE HUB UNIT object { fbf } // frame assembly object { rs } // the 6 roof panels + skylight object { stairs } // 2 metre diameter glass cylinder with staircase #declare k = 0; #while( k < 360 ) object { d0 rotate <0, k, 0> } // right-handed internal centre panel object { d1 rotate <0, k+60, 0> } // left-handed internal centre panel #declare k = k + 120; // placed in pairs every 120 degrees #end rotate <0, 30, 0> } #declare daisy = union { // ASSEMBLE A COMPLETE DAISY MODULE object { hub } object { patio } object { patio rotate <0, 60, 0> } object { petal rotate <0, 120, 0> } object { petal rotate <0, 180, 0> } object { petal rotate <0, 240, 0> } object { petal rotate <0, 300, 0> } } // RENDERING TIME ALMOST 3 HOURS // DIMENSIONS OF THE TRIANGLE FORMED BETWEEN THE CENTRES OF THE THREE ACCOMMODATION MODULES #declare q = 5.7735026918962576450914878050196; // distance from mid-side to centre of triange. #declare p = 11.547005383792515290182975610039; // distance from apex to centre of triangle. #declare ninho = union { // DISPLAY THE COMPLETE NINHO DE AMOR object { daisy // include the play module translate < 10, 0, -q> // shift it 10 metres west and 5.7735 metres north } object { daisy // include the rest module rotate <0, 120, 0> // rotate it horizontally 120 degrees clockwise translate <-10, 0, -q> // shift it 10 metres east and 5.7735 metres north } object { daisy // include the work module rotate <0,-120, 0> // rotate it horizontally 120 degrees anticlockwise translate <0, 0, p> // shift it 11.547 metres south } } // RENDERING TIME OVER 5 HOURS object { petal rotate <0, -12, 0> } /* union { object { d0 } object { d2 } object { d3 } rotate <0, 12, 0> } union { object { post } // 1 metre diameter glass support cylinder object { tblm rotate <180, -12, 0> } // bottom centre panel with hole object { roof rotate <180, -12, 0> } // the 6 segment panels surrounding it. } union { object { stairs } // 2 metre diameter glass cylinder with staircase object { roof rotate <180, -12, 0> } // the 6 segment panels surrounding it. } */