/* A x10 zoom projector for a laser */

#declare Animate = no;
#if ( Animate = no) #declare klok = 11;
#else #declare klok = 2+clock*18;
#end

#declare km2 = klok-2.0;

/*************************** Setup media and photons ******************************/

#declare MdyaOn = yes; #declare NFtonsOn = yes;
#declare BoxLen = 270; #declare BoxHyt = 30;
#declare MdyaThk = 0.1; #declare MedIntvals = 1;4; #declare MedSampls = 4; #declare Hfld = no;

global_settings { max_trace_level 16 assumed_gamma 1.0
                       #if(NFtonsOn = yes)
                            photons { count 3e8
                                          max_trace_level 128
                                          #if(MdyaOn = yes) media 100,2 #end
                                          autostop off
                                        }
                       #end
                       #if(Hfld = yes) hf_gray_16 #end
                     }

/****************** Setup a thin media box to contain the sliced lens system ***************/
#if(MdyaOn = yes)
         box { < -0.1,-BoxHyt,-20>,< 0.1,BoxHyt,BoxLen>
                 pigment { rgbt 1 } finish { ambient 0 diffuse 0 }
                 interior { media { scattering { 1,color rgb 1 extinction 0 } method 3
                                         intervals MedIntvals samples MedSampls
                                      }
                           }
                 photons { target }
                 hollow
              }
#end

/**** Setup a 13mm diameter laser beam light source with correct 1/R^2 fade power and distance***/

#declare RadCyl = degrees(atan2(13.0/2,1e4));

 light_source { -z*1e4 rgb 1e6
                     spotlight radius RadCyl falloff 1.01*RadCyl tightness 10 point_at 0
                     fade_power 2 fade_distance 10
                     photons { refraction on reflection off }
                     media_interaction on
                  }

/*********************** The zooming projector lens *******************************/

/* Reflectivity of lens elements */
#declare ARefltype = 0; #declare AReflmin = 0.0; #declare AReflmax = 0.9; #declare AReflfal = 7;

/* Trace aspherics, if any? */
#declare Aspherix = no; #declare Evalac = 0.001;

/* Trace chromatic rays? */
#declare GlCrom = no; #declare DispSmps = 8; #declare GlMdya = no;

/* Start lens layout in relative coordinates */
#declare ThisOrigin = 0.0; #declare NextOrigin = 0.0;

/* The zoom spacing values */
#declare CL3 = 6.67*pow(km2,1.6)*exp(-0.0683*km2)+0.2434;
#declare CL7 = 63.116*km2*exp(-0.2043*km2) -1.1577* km2+4.4423;
#declare CL9 = 401*exp(-0.3085*klok) + 0.0181*klok*klok;
#declare CL9 = 224-CL3-CL7;

#include "glasses.inc"

// The first lens
#declare LnzNum = 1; #declare LensOpen = material { Glas__BAK4 } #declare LensBlnk = texture { GlasBlnk }
#declare AspR1 = no; #declare AspR2 = no;

#declare R1 = 52.873; #declare Thk = 2.000; #declare D1 = 8.00;
#declare R2 = 189.829; #declare Nex = CL3; #declare D2 = 8.00;
#include "lensmp.inc" #declare Lens0203 = object { LensMP translate z*ThisOrigin }

// The second lens
#declare LnzNum = 2; #declare LensOpen = material { Glas__BAK4} #declare LensBlnk = texture { GlasBlnk }
#declare AspR1 = no; #declare AspR2 = no;
#declare R1 = 171.458; #declare Thk = 5.000; #declare D1 = 30.00;
#declare R2 = 83.912; #declare Nex = 8.138; #declare D2 = 28.00;
#include "lenspp.inc" #declare Lens0405 = object { LensPP translate z*ThisOrigin }

// The third lens
#declare LnzNum = 3; #declare LensOpen = material { Glas__BAK4 } #declare LensBlnk = texture { GlasBlnk }
#declare AspR1 = no; #declare AspR2 = no;
#declare R1 = 132.593; #declare Thk = 12.000; #declare D1 = 30.00;
#declare R2 = 91.913; #declare Nex = CL7; #declare D2 = 30.00;
#include "lenspm.inc" #declare Lens0607 = object { LensPM translate z*ThisOrigin }

// The fourth lens
#declare LnzNum = 4; #declare LensOpen = material { Glas__BAK4 } #declare LensBlnk = texture { GlasBlnk }
#declare AspR1 = no; #declare AspR2 = no;
#declare R1 = 136.203; #declare Thk = 6.000; #declare D1 = 28.00;
#declare R2 = 204.774; #declare Nex = CL9; #declare D2 = 28.00;
#include "lenspm.inc" #declare Lens0809 = object { LensPM translate z*ThisOrigin }

// The fifth lens
#declare LnzNum = 5; #declare LensOpen = material { Glas__BAK4 } #declare LensBlnk = texture { GlasBlnk }
#declare AspR1 = no; #declare AspR2 = no;
#declare R1 = 688.808; #declare Thk = 3.000; #declare D1 = 28.00;
#declare R2 = 54.493; #declare Nex = 15.000; #declare D2 = 26.00;
#include "lensmp.inc" #declare Lens1011 = object { LensMP translate z*ThisOrigin }

#declare ZoomProj = intersection { union { object { Lens0203 }
object { Lens0405 }
object { Lens0607 }
object { Lens0809 }
object { Lens1011 }
}
plane { x, 0.15 pigment { rgb<0.5,1,0.5> } finish { ambient 1 } }
plane { x, -0.15 pigment { rgb<0.5,1,0.5> } finish { ambient 1 } inverse }
}

object { ZoomProj photons { target refraction on reflection off } }


/***************************************************************************************************************************/

camera {location x*3e4+z*125 look_at z*125 angle 0.55}