POV-Ray : Newsgroups : povray.newusers : Fresnel Lens example : Fresnel Lens example Server Time
27 Jun 2024 16:43:14 EDT (-0400)
  Fresnel Lens example  
From: ptsneves
Date: 30 Mar 2012 16:00:01
Message: <web.4f760ff9e35bc513a12770b50@news.povray.org>
Hi
I found on Google a scene exemplifying the use of one fresnel lens. I have tried
to change the scene to put another fresnel lens in front of the converged light
coming from the fresnel lens. The problem is that light does not pass across
this second fresnel lens and just "stops" there with no effect. I would be
grateful if somebody pointed me out why is this simple addition not working or
at least point to the concept which i am misunderstanding.

Below is the scene file.
Thanks
Paulo Neves


The newsgroup link is here:
http://news.povray.org/povray.binaries.images/message/%3Cweb.439fd98c9020f8e92b1529d00%40news.povray.org%3E/#%3Cweb.439
fd98c9020f8e92b1529d00%40news.povray.org%3E


//-------------------------------------------------------------

// Persistence Of Vision raytracer version 3.5 sample file.
// File: optics.pov
// Author: Christopher J. Huff
//
// Modified by PM 2Ring. Show convergence of a Fresnel lens.
//
// -w320 -h240
// -w800 -h600 +a0.3

#version 3.5;

global_settings {
    assumed_gamma 1
    //max_trace_level 10
    #if(1)
    photons {
        count 175000
        media 100,2
    }
    #end
}

#declare CamPos = 18*y;
//#declare CamPos = <3, 5, 0> * 2.5;
camera {
    location CamPos
    look_at 0
    angle 35
}

//Fill light
#if(1)
light_source {CamPos, rgb .25
    photons {refraction off reflection off}
    media_interaction off
}
#end

#if(1)
light_source {<-150, 0.5, 0> rgb < 1.2, 1, 1.5>
    spotlight radius 0.3 falloff 0.35 point_at < 0, 0.5, 0>
    photons {refraction on reflection on}
}
#end

//---textures----------------------------------------------------------

#default {finish {ambient 0}}

#declare GlassTex1 =
texture {
    pigment { rgb 1 filter 0.99}
    finish {ambient 0 diffuse 0 reflection 0.01}
}

#declare GlassTex2 =
texture {
    pigment { rgb 1 filter 0.99}
    finish{
        ambient 0 diffuse 0.1
        specular 0.5 roughness 1e-3
        reflection {0,1 fresnel}
        conserve_energy
    }
}

#declare GlassIOR = 1.5;
#declare GlassInt1 = interior {ior GlassIOR}

#macro PhotonTarget(Reflect, Refract, IgnorePhotons)
    photons {
        target
        reflection Reflect
        refraction Refract
        #if(IgnorePhotons) collect off #end
    }
#end

//---objects----------------------------------------------------------

#macro Block(From, To)
    union {
        cylinder {From, To*(x+z), 0.1 scale < 1, 10*To.y, 1>
            texture {
                pigment {checker rgb .90, rgb .70
                    scale 0.1
                }
                finish {brilliance 0.5}
            }
        }
        cylinder {From, To*(x+z), 0.025
            translate y*To
            texture {
                pigment { rgb < 1, 0.7, 0.2>}
                finish {ambient 0.8}
            }
        }
    }
#end

//light baffle
union {
    difference {
        object {Block(<-4, 0,-3>, <-4, 1.5, 3>)}
        box {<-5, 0.25,-0.5>, < -3, 0.75, 0.5>}
    }
    cylinder {<-4, 0, 0>, <-4, 1.5, 0>, 0.1 translate z*0.15}
    cylinder {<-4, 0, 0>, <-4, 1.5, 0>, 0.1 translate -z*0.15}
    texture {pigment { rgb 1}}
}

//media box
box {<-7,-0.1,-3>, < 6, 1, 4> hollow
    texture {pigment { rgbf 1}}
    interior {
        media {
            scattering {1, rgb 1 extinction 0}
            method 3
            intervals 1 samples 4
        }
    }
    photons {
      target
      pass_through
    }
}

//checkered floor/background
box {<-100,-1.1,-100>, < 100, -1, 100>
    texture {
        pigment {checker rgb .90, rgb < 0.2, 0, 0.4>}
        finish {brilliance 0.25}
    }
}

//---lenses----------------------------------------------------------
#declare T = 0.475;
#declare R = 1.0;
#declare SphericLens1 =
intersection {
    sphere {<-R, 0, 0>, R translate x*T}
    sphere {< R, 0, 0>, R translate -x*T}
    texture {GlassTex1}
    interior {GlassInt1}
    PhotonTarget(no, yes, yes)
}

// ---Fresnel lens-------------------------------------
#declare Rings = 360;
#declare Height = 1;
#declare FocalLen = 3;             //Focal length
#declare IOR = GlassIOR;

#declare FLEN = Rings*FocalLen;    //scale up focal length
#declare F2 = FLEN * FLEN;

//Calculate prism slope.
#macro fres(X)
  #local R = sqrt(X*X + F2);
  (X / (IOR * R - FLEN))
#end

//Lens profile is a series of right prisms. Each prism has a base of 1 unit,
so height = slope.
// For right triangle ABC, C is the right angle, BC is horizontal with
length 1 unit,
// AC is the height, which is calculated to give correct refraction at the
midpoint of BC
#declare SFresnelLens =
lathe{
  linear_spline
  2*Rings+5,

  <0, -Height>           //Give the whole disc a flat base
  <0, 0>
  #declare I = 1;
  #while(I<=Rings)
    <I-.5, 0>            //Point 'C' of this triangle and point 'B' of the
previous
    <I-.5, fres(I)>      //Point 'A'
    #declare I = I + 1;
  #end
  <I-.5, 0>
  <I, 0>                 //Give the disc a rim
  <0, -Height>           //close off base

  rotate -90*z           //rotate so flat base faces towards the spotlight
  scale 1/Rings
}

#declare FresnelLens =
object{
  SFresnelLens
  //pigment{radial rotate 90*z}
  texture {GlassTex2}
  interior {GlassInt1}
  PhotonTarget(yes, yes, yes)
}

// ----The scene--------------------------------------------------------

object{FresnelLens translate <-2, 0.5, 0>}
object{FresnelLens translate <3, 0.5, 0>}

#if(0)
  #declare Spot=sphere{-y, .1 pigment{rgb 1}finish{ambient .3 diffuse .9}}
  object{Spot translate<-2, 0, 1>}
  object{Spot translate<-2, 0, -1>}
  object{Spot translate<FocalLen-2, 0, 1>}
  object{Spot translate<FocalLen-2, 0, -1>}
#end


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.