|  |  | Here's one of the Kepler-Poinsot solids: the small stellated dodecahedron,
on a Penrose tiling floor. The code also contains a slightly simpler & more
accurate dodecahedron than the one in the shapes2.inc.
Enjoy!
// Persistence of Vision Ray Tracer Scene Description File
// File: Dodec.pov
// Vers: 3.5
// Desc: Dodecahedron & small stellated dodecahedron
// Date: 2006.13.05
// Auth: PM 2Ring
//
// -d +A0.2 +AM2 +R4
// -F -A0.4 +AM2 +R1
// +A0.5 +AM2 +R2
// -d +A0.1 +AM2 +R4 +w1200 +h900
// +A0.3 +AM2 +R3
// -d +A0.5 +AM2 +R2 +w1200 +h900
// +A0.2 +AM2 +R2 +w1200 +h900 +FN
//
global_settings {
  assumed_gamma 1
  max_trace_level 50 //  7
}
#include "colors.inc"
#declare Area_Lights = 0;
#declare Do_Floor = 1*8;
#declare Reflect = 1*.75;
#declare WorldRad = 40;
//#declare CamLoc = <0, 15, -6.25> * .95;
//#declare CamLoc = <0, 4, -5> * 1;
#declare CamLoc = <0, 2, -6.25>* 2.0;
//#declare LookAt = 0;
//#declare CamLoc = <2.5, -3, 0.75>;
#declare LookAt = y*1.2;
camera {
  location CamLoc
  look_at LookAt
  right x*image_width/image_height up y
  direction z
  angle 30
}
#if(1)
light_source {
  <-0.75, 5, -3> * 4.5
  //rgb 1
  rgb 100 fade_distance 2.0 fade_power 2        //1.65 2.25
  #if(Area_Lights)
    #declare AL = 9;
    #declare ASize = 0.75;
    area_light x*ASize, z*ASize, AL, AL
    adaptive 1 // 2
    jitter
    circular
    orient
  #end
}
#end
light_source {CamLoc rgb .1 shadowless}
//---Textures--------------------------------------------------------------
//For sky
#declare CMGray0 = color_map {[0.2 rgb 0.1][0.8 rgb .9]}
//For ground
#declare CMGray1 = color_map {[0 rgb .60][1 rgb 1.0]}
//Block finish
#declare FShiny =
finish{
  ambient 0.075
  diffuse .8
  specular .75 roughness 3e-4
  phong .5 phong_size 5
  #if(Reflect)
    //reflection .175*Reflect
    reflection {0.05, 1 fresnel}
  #end
  conserve_energy
}
#declare FGlass =
finish
{
  ambient 0
  diffuse 0.15 //.2
  #if(Reflect)
    reflection {0.05*Reflect, 1*Reflect fresnel}
  #end
  specular .75
  roughness 1E-4
  //brilliance 1.5
  conserve_energy
}
#declare TGlass = texture
{
  pigment { color rgbf <0.985, .9975, .990, 1> }
  //pigment { color rgbf <0.985, .9975, 1, 1> }
  finish{FGlass}
}
#declare FGround =
finish{
  ambient 0.05
  specular .25 roughness 3e-4
  reflection .75*Reflect diffuse .7 //2
}
#declare TGround =
texture{
  //pigment{granite scale 75 colour_map{CMGray1}}
  //pigment{checker rgb 0, rgb 1 rotate 45*y scale 2}
  pigment{rgb 0*.75}
  finish{FGround}
}
//Tile textures
#declare Tex1=
texture{
  pigment{rgb 0}
  finish{FGround}
}
#declare Tex2=
texture{
  pigment{rgb 1}
  finish{FGround}
}
#declare Tex3=
texture{
  pigment{rgb 0.5}
  finish{FGround}
}
#declare TSky =
texture{
  pigment {
    function{abs(y)}
    color_map{CMGray0}
  }
  finish{ambient 0.1 diffuse 0.85}
}
//---Macros-------------------------------------------
#macro FaceColour0(N)#end
#macro FaceColour(N)
  #local Hue = 180 + 240*(mod(7+N,11))/11;
  //#local Hue = 240*mod(N,2);
  pigment{colour CHSV2RGB(<Hue, .75, .95>)filter 0.9}  // transmit 0.65
  //pigment{colour CHSV2RGB(<Hue, .65, .85>)}
  //pigment{rgb x}
  finish{FShiny}
  //finish{FGlass}
#end
#macro Pentamid(A, B, C, D, E, F)
  intersection
  {
    object{Planes[A] inverse}
    object{Planes[B]}
    object{Planes[C]}
    object{Planes[D]}
    object{Planes[E]}
    object{Planes[F]}
  }
#end
// ---Penrose triangle macros-------------------------------------
#declare Phi=(sqrt(5)+1)/2;            //The Golden ratio
#declare phi=Phi-1;
//Interpolate from A to B
#macro inter(A,B,r) (A*(1-r)+B*r) #end
#macro PutSlim(A,B,C,P)
  #if(P)
    #local T1 = Tex1;
    #local T2 = Tex2;
  #else
    #local T1 = Tex2;
    #local T2 = Tex1;
  #end
  #local E = inter(A,B,.5);
  #local F = inter(A,C,phi);
  #local G = inter(B,C,Phi/2);
  triangle{A,E,F texture{T1}}
  triangle{C,F,G texture{Tex3}}
  triangle{B,E,F texture{T2}}
  triangle{B,G,F texture{T2}}
#end
#macro PutWide(A,B,C,P)
  #if(P)
    #local T2 = Tex2;
  #else
    #local T2 = Tex1;
  #end
  #local E = inter(B,A,Phi/2);
  #local F = inter(B,C,phi);
  triangle{B,E,F texture{T2}}
  triangle{A,F,E texture{Tex3}}
  triangle{A,F,C texture{Tex3}}
#end
#macro Slim(A,B,C,D,P)
  #if(D=0)
    PutSlim(A,B,C,P)
  #else
    #local E = inter(A,B,phi);
    #local F = inter(C,A,phi);
    Wide(F,E,A,D-1,P)
    Slim(C,E,F,D-1,P)
    Slim(C,E,B,D-1,P)
  #end
#end
#macro Wide(A,B,C,D,P)
  #if(D=0)
    PutWide(A,B,C,P)
  #else
    #local E = inter(C,B,phi);
    Wide(E,A,B,D-1,1-P)
    Slim(C,A,E,D-1,1-P)
  #end
#end
// ----------------------------------------
#declare Top = 0*-1E-4;     //Tile top height
#declare Ang = pi/5;
#declare Ang0 = radians(-117);
#declare Ang1 = radians(-81);
#declare Rad = WorldRad;
#declare Rdepth = Do_Floor;
#if(Do_Floor)
#declare Wedge=mesh{
  Slim(0, <cos(Ang0), 0, sin(Ang0)>*Rad, <cos(Ang1), 0, sin(Ang1)>*Rad,
Rdepth, 0)
  translate Top*y
}
#declare Floor =
union{
#declare I=0;
#while(I<5)
  object {Wedge rotate y*72*I}
  object {Wedge matrix <0,0,-1, 0,1,0, -1,0,0, 0,0,0> rotate y*72*I}
  #declare I=I+1;
#end
  rotate 9*y
}
#end
//--------------------------The objects-------------------
//Pre-compute dodecahedron planes
#declare Planes = array[12];
#declare Planes[0] = plane { y, 1 FaceColour(0)};
#declare Planes[11] = plane {-y, 1 FaceColour(11)};
#declare I=1;
#while(I<=5)
  #declare Planes[I] =   plane {<0,  1, -2>, 1 rotate y*(36+72*I)
FaceColour(I)};
  #declare Planes[I+5] = plane {<0, -1, -2>, 1 rotate y*72*I
FaceColour(I+5)};
  #declare I=I+1;
#end
#declare Dodecahedron =
intersection
{
  #declare I=0;
  #while(I<12)
    object{Planes[I]}
    #declare I=I+1;
  #end
  bounded_by {sphere {0, 1.258409}}      //(2-Phi)*sqrt(3*Phi+6)
}
#declare SSDodec =
//union
merge
{
  Pentamid(0, 1, 2, 3, 4, 5)
  Pentamid(1, 0, 2, 5, 6, 7)
  Pentamid(2, 0, 1, 3, 7, 8)
  Pentamid(3, 0, 2, 4, 8, 9)
  Pentamid(4, 0, 3, 5, 9, 10)
  Pentamid(5, 0, 1, 4, 6, 10)
  Pentamid(6, 11, 10, 7, 5, 1)
  Pentamid(7, 11, 8, 6, 2, 1)
  Pentamid(8, 11, 9, 7, 3, 2)
  Pentamid(9, 11, 10, 8, 4, 3)
  Pentamid(10, 11, 9, 6, 5, 4)
  Pentamid(11, 10, 9, 8, 7, 6)
  object{Dodecahedron}
  //interior{ior 1.5 dispersion 1.1 dispersion_samples 5}
  interior{ior 1.5}
  bounded_by {sphere {0, sqrt(5)}}
  rotate x*degrees(atan(3-sqrt(5)))
  translate y*1.7761
}
#declare Ground =
  cylinder{
  -y, Top*y, WorldRad
  texture{TGround}
}
#declare Sky =
sphere {0,1 inverse
  texture{TSky}
  scale WorldRad
}
//--------------------------The actual scene-------------------
#if(1)
  object{Sky}
#else
  background{rgb 0.5}
#end
#if(Do_Floor)
  object{Floor}
#else
  object{Ground}
#end
#if(1)
object{
  //Dodecahedron
  SSDodec
  //texture{TGlass}
  //translate y
  rotate y*(180 - 3*18)
  //scale 1.25
  //translate -Phi*z
}
#end
//-------------------------End of file-------------------------
Post a reply to this message
 Attachments:
 Download 'dodecf0ws.jpg' (114 KB)
 
 
 Preview of image 'dodecf0ws.jpg'
  
 |  |