// Persistence of Vision Ray Tracer Scene Description File
// File: brush.pov
// Vers: 3.1
// Desc: Wooden handled hairbrush on semi-reflective white tiles
// Date: Jan 29, 2001 
// Auth: Michael Koopman (mkoopman@hotmail.com) 

#include "colors.inc"
#include "textures.inc"
#include "woods.inc"
#include "stones.inc"

#declare Bristles =
union {
cylinder {
   <0, 0, 0>,
   <0, 4, 0>,
   0.05
   pigment { Gray20 }
}

#declare bristlecount=0;
#while (bristlecount < 360)
cylinder {
   <0, 0, 0>,
   <0, 4, 0>,
   0.05
   rotate z*7.5
   rotate y*bristlecount
   pigment { Gray20 }
}
#declare bristlecount = (bristlecount + 30);
#end
}

#declare bristlerow =
union {
#declare bristleztrans = 11;
#while (bristleztrans < 26)
object {
   Bristles
   translate <0, 0, bristleztrans>
}
#declare bristleztrans = (bristleztrans + 1);
#end
}


background { MidnightBlue }

default {
   pigment { DMFWood4 rotate y*7 turbulence 0.1 scale 5 }
   finish { phong 1 }
}

/*
camera {
   location <0, 30, 5>
   look_at <0, 0, 5>
   orthographic
}
*/

camera {
   location <-20, 15, 0>
   look_at <0, 1, 10>
}

light_source {
   <-25, 15, 15>
   rgb <0.7, 0.7, 0.7>
   area_light <0, 3, 0>, <0, 0, 3>, 5, 5
   adaptive 1
   jitter
}

light_source {
   <10, 15, -15>
   rgb <0.3, 0.3, 0.3>
   area_light <0, 3, 0>, <3, 0, 0>, 5, 5
   adaptive 1
   jitter
}


#declare FinishedBrush =
union {

torus {
   2, 0.5
}

cylinder {
   <0, -0.5, 0>,
   <0,  0.5, 0>,
   2
}

box {
   <-2, -0.5, 0>,
   < 2,  0.5, 5>
}

cylinder {
   <-2, 0, 0>,
   <-2, 0, 5>,
   0.5
}

cylinder {
   <2, 0, 0>,
   <2, 0, 5>,
   0.5
}

difference {
cylinder {
   <0, -0.5, 0>,
   <0,  0.5, 0>,
   2
   scale <1, 1, 2>
   translate z*5
}
box {
   <-5, -5, -5>,
   < 5,  5,  5>
}
}

difference {
torus {
   2, 0.5
   scale <1, 1, 2>
   translate z*5
}
box {
   <-5, -5, -5>,
   < 5,  5,  5>
}
}






difference {
box {
   <-4, -0.5, 9>,
   < 4,  0.5, 11>
}

cylinder {
   <-4, -3, 9>,
   <-4,  3, 9>,
   2.5
}

cylinder {
   < 4, -3, 9>,
   < 4,  3, 9>,
   2.5
}
}

cylinder {
   <-1.5, 0, 9>,
   < 1.5, 0, 9>,
   0.5
}

sphere {
   0, 0.5
   translate <-1.5, 0, 9>
}

sphere {
   0, 0.5
   translate < 1.5, 0, 9>
}

difference {
torus {
   2.5, 0.5
   translate <-4, 0, 9>
}
box {
   <-10, -5, 0>,
   < 10,  5, 9>
}
box {
   <-10, -5, 0>,
   <-2.55, 5, 15>
}
}

difference {
torus {
   2.56, 0.5
   translate < 4, 0, 9>
}
box {
   <-10, -5, 0>,
   < 10,  5, 9>
}
box {
   < 10, -5, 0>,
   < 2.56, 5, 15>
}
}

sphere {
   0, 0.5
   translate <-2.5, 0, 10.88>
}

sphere {
   0, 0.5
   translate < 2.5, 0, 10.88>
}

cylinder {
   <-2.5, 0, 10.88>,
   <-2.5, 0, 25.5>,
   0.5
}

cylinder {
   < 2.5, 0, 10.88>,
   < 2.5, 0, 25.5>,
   0.5
}

box {
   <-2.5, -0.5, 10.88>,
   < 2.5,  0.5, 25.5>
}

cylinder {
   <-2.5, 0, 25.5>,
   < 2.5, 0, 25.5>,
   0.5
}

sphere {
   0, 0.5
   translate <-2.5, 0, 25>
}

sphere {
   0, 0.5
   translate < 2.5, 0, 25>
}


#declare bristlextrans = -2.25;
#while (bristlextrans < 2.26) 
object {
   bristlerow
   translate x*bristlextrans
}
#declare bristlextrans = (bristlextrans + 1);
#end

object {
   Bristles
   translate <-1, 0, 10>
}

object {
   Bristles
   translate <0, 0, 10>
}

object {
   Bristles
   translate < 1, 0, 10>
}

}


object {
   FinishedBrush
   rotate y*7
   translate x*-4
}



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





#declare tilegrout =
box {
   <-100, -5, -30>,
   < 100, -0.55, 40>
   pigment { White }
}

#declare tilerow =
union {
#declare tilextrans = -100;
#while (tilextrans < 100)
superellipsoid {
   <0.25, 0.25>
   scale 2
   translate y*-2.5
   translate x*tilextrans
}
#declare tilextrans = (tilextrans + 3.5 );
#end
}

#declare tileledge =
union {
#declare tileztrans = -30;
#while (tileztrans < 40)
object {
   tilerow
   translate z*tileztrans
}
#declare tileztrans = (tileztrans + 3.5 );
#end
}

object {
   tileledge
   texture { T_Grnt20 scale 2 }
   finish { phong 1 reflection 0.15 }
}

object {
   tilegrout
}

object {
   tileledge
//   texture { T_Grnt20 }
   finish { phong 1 reflection 0.15 }
   pigment { White }
   rotate x*-90
   translate y*-0.4
   translate z*38
   translate x*0.5
}

object {
   tilegrout
   rotate x*-90
   translate y*-0.4
   translate z*38
   translate x*0.5
}

object {
   tileledge
//   texture { T_Grnt20 }
   finish { phong 1 reflection 0.15 }
   pigment { White }
   rotate x*-90
   rotate y*90
   translate y*-0.4
   translate x*17
   translate z*-0.3
}

object {
   tilegrout
   rotate x*-90
   rotate y*90
   translate y*-0.4
   translate x*17
   translate z*-0.5
}

box {
   <-500, 100, -500>,
   < 500, 101,  500>
   pigment { White }
}

    Source: geocities.com/ronfar.geo