|
|
anidonu nous apporta ses lumieres en ce 05/07/2006 15:24:
> It's straightforward to model a light source with a lens to form a real
> image. But is it possible to form an image of a diffuse object?
> Comments are welcome on why this file does not do so.
>
> /* Makes a photon mapping scene with single or crossed cylindrical lenses
>
> The lens is formed from the intersection of a glass cylinder height
> 2*HCyl along the y-axis, with a plane parallel to its axis.
> The radius of the cylinder is RCyl.
> The refractive index of the glass is RefIndx
> The intersecting plane, parallel to the xy plane, is SCyl
> The lens stands on its end on a checkered plane
> A square array of distant lightsources is imaged by the lens to a focus
> screen
> The screen position is animated
> A transparent 'slide' is in front of the lights array
> */
>
> #include "colors.inc" #include "textures.inc"
>
> global_settings { assumed_gamma 2.2 max_trace_level 32
> photons { count 1500000 max_trace_level 32 }
> }
>
> #declare k = 0.5; //clock;
>
>
/*********************************************************************************************************/
>
> /* Choose a single lens or a crossed pair in contact */
> #declare Crossed = no;
> #declare Crossed = yes;
>
>
/********************************************************************************************************/
> /*Specify the lens setup*/
>
> #declare RCyl = 200;
> #declare SCyl = 192;
> #declare RefIndx = 1.517;
> #declare CapHght = RCyl - SCyl;
> #declare HCyl = sqrt(RCyl*RCyl - SCyl*SCyl );
>
>
> #declare PlanoCyl = intersection { cylinder { -y*HCyl, y*HCyl,RCyl}
> plane { z,SCyl inverse }
> material { texture { pigment { rgbt
> <0.9,0.98,0.9,0.98> }
> finish { ambient
> 0.02 diffuse 0.008 reflection 0.01 } }
> interior { ior RefIndx }
> }
> }
>
> #declare BFL = RCyl/(RefIndx-1);
>
> /************************* Setup the focus screen and a baffle */
>
> #declare Screen = box { <-1,-1,0>,<1,1,0.1> scale 50 pigment { rgb 1 }
> finish { ambient 0.02 diffuse 0.8} }
> #declare ScrnPos = -z*(BFL+ 50*(2*k-1));
>
> #declare Stop = intersection { box { <-200,-200,0>,<200,200,1> }
> box { <-HCyl,-HCyl,-1>,<HCyl,HCyl,2> inverse
> }
> pigment { rgb 1 } finish { ambient 0 diffuse
> 0 reflection 0 }
> }
Beter to use difference than intersection and inverse, it's clearer.
>
> /************************** Photon mapping lightsources
> *******************************/
>
> #switch ( Crossed)
> #case( yes) #declare LyteBryte = 0.0003*1e0; #break
> #case(no) #declare LyteBryte = 0.003; #break
> #end
>
> #declare Step = 2.5e2;
> #declare I = -1e3;
>
> #declare LiteMatrix = union { #while ( I<=1e3)
> #declare J = -1e3;
> #while ( J<=1e3)
> light_source { <I,J,15000>, color rgb
> LyteBryte
> photons {refraction on
> reflection on}
> }
> #declare J = J + Step;
> #end
> #declare I = I + Step;
> #end
> }
>
>
> /************************** The test object is a partially transparent
> color_map ********************/
>
>
> #declare Slide = box { <-1e3,-1e3,0>,<1e3,1e3,1e1>
> pigment { gradient x color_map{ [0 rgbt<0,1,0,0.5> ]
> [1 rgbt<1,0,1,0.5> ]
> }
> translate -x*0.5
> scale 1e2
> }
> finish { ambient 0 diffuse 1.0 }
> }
>
> /******************************* THe scene
> ******************************************/
>
>
> // CamNum = 1 for an oblique downward look at scene
> // CamNum = 2 for the camera 150mm infront of and looking at screen
>
> #declare CamNum = 1;
> #switch ( CamNum )
> #case(1) #declare CamPos = 1e3; #declare CamAng = 5; #break
> #case(2) #declare CamPos = ScrnPos+z*150; #declare CamAng = 55; #break
> #end
>
>
>
> #declare Projekta = union { object { PlanoCyl translate -z*SCyl}
Would be beter to use a merge here to remove internal surfaces.
> #if( Crossed = yes) object { PlanoCyl rotate
> z*90 translate -z*(SCyl+CapHght)} #end
> object { LiteMatrix translate z*15100 }
>
>
> photons { target }
> }
>
> object { Slide translate z*15000 photons { target } }
> object { Projekta }
This is you lense, it MUST have photons{target refracion on}, otherwize, you don't
shoot any photon
at it.
> object { Screen translate ScrnPos photons { target }}
This the screen on whitch you project the photons, it DON'T need a photons block. You
don't shoot
photons at it, it collect them and make them visible.
> object { Stop translate z*5}
>
> background { rgb 0.5 }
>
> camera { location CamPos look_at ScrnPos angle CamAng }
>
>
>
>
>
The light_source are to close to the slide: Put them back by about 10 times or make
them parallel.
--
Alain
-------------------------------------------------
Beam me up Scotty. This isn't the men's room.
Post a reply to this message
|
|