// Last edited on 2007-07-23 21:25:53 by stolfi
// Processed by remove-cam-lights

background{ color rgb < 0.75, 0.80, 0.95 > }

#declare ang_rot_antebracoE = 45*clock;
#declare ang_rot_antebracoD = 45*clock;
#declare ang_rot_bracoEx = (120-clock*120);
#declare ang_rot_bracoEy = -30;
#declare ang_rot_bracoEz = 0;
#declare ang_rot_bracoDx = (120-clock*120);
#declare ang_rot_bracoDy = 30;
#declare ang_rot_bracoDz = 0;
#declare ang_rot_canelaD = (0-60*clock);
#declare ang_rot_canelaE = (0-60*clock);
#declare ang_rot_pernaD = (45*clock);
#declare ang_rot_pernaE = (-45*clock);
#declare ang_rot_cabecaX = 0;
#declare ang_rot_cabecaY = 0;
#declare ang_rot_cabecaZ = 0;
#declare ang_rot_cauda = 0;

#declare cor_pelo =
  texture {
    pigment { color rgb < 0.75, 0.45, 0.15 > }
}

#declare cor_nariz =
  texture {
    pigment { color rgb < 0.10, 0.10, 0.10 > }
    finish { ambient 0.1 diffuse 0.7 reflection 0.2 phong 1 brilliance 1 }
  }

#declare cor_orelha =
  texture {
    pigment { color rgb < 1.00, 1.00, 1.00 > }
    finish { ambient 0.1 diffuse 0.8 reflection 0.05 phong 0.8 roughness 0.05 }
  }

#declare orelha =
difference {
        sphere {
         <0,0,0>,1
         texture { cor_pelo } }
        sphere {
         <0,1,0>,1.5
        texture { cor_orelha }
        }
}

#declare cabeca =
union {
        sphere {
        <0,0,0>,2
        texture { cor_pelo }
        }
        cone {
        <0,0,0>,1.5,<0,4.5,-0.25>,0
        texture { cor_pelo }
        }
        sphere {
        <0,4.5,-0.25>,0.3
        texture { cor_nariz }
        }
        sphere {
        <-1,1.3,1.40>,0.3
        texture { cor_nariz }
        }
        sphere {
        <1,1.3,1.40>,0.3
        texture { cor_nariz }
        }
        object {
        orelha
        translate <-1,0,1.75>
        }
        object {
        orelha
        translate <1,0,1.75>
        }
}

#declare pescoco =
        cylinder {
        <0,0,-1.20>,
        <0,0,-2>,
        0.7
        texture { cor_pelo }
        }

#declare tronco =
        cylinder {
        <0,0,-2>,
        <0,0,-5>,
        1.80
        texture { cor_pelo }
        }

#declare corpo =
        union {
         object { tronco }

         sphere {
         <-1.9,0,-2.1>,0.6
         texture { cor_pelo }
         }
         sphere {
         <+1.9,0,-2.1>,0.6
         texture { cor_pelo }
         }

         sphere {
         <-1.2,0,-5.75>,0.8
         texture { cor_pelo }
         }
         sphere {
         <+1.2,0,-5.75>,0.8
         texture { cor_pelo }
         }
        }

#macro antebraco (esqdir)
 union {

  cylinder {
 <0,0,0>,<0,0,-1.7>,0.5
 texture { cor_pelo }
  }

  sphere {
 <0,0,-1.7>,0.85
 texture { cor_pelo }
 }
 box {
 <0,0,0>,
 <1,1,5.7>

 rotate 25*esqdir*y
 rotate -25*x
 translate <-0.65,-0.65,-1.7>
 texture { pigment { color rgb <0.2,0.2,0.2> }
finish { ambient 0.2 diffuse 0.8 phong 1} }
 }
 }
#end

#macro braco (ang_ante,esqdir)

 union {

 cylinder {
 <0,0,0>,<0,0,-1.7>,0.5
 texture { cor_pelo }
 }

 sphere {
 <0,0,-1.7>,0.6
 texture { cor_pelo }
 }
 object { antebraco(esqdir) rotate ang_ante*x translate  <0,0,-1.7> }
 }
#end

#declare canela =
 union {

 cylinder {
 <0,0,0>,<0,0,-2.25>,0.65
 texture { cor_pelo }
 }

 sphere {
 <0,0,-2.25>,1
 texture { cor_pelo }
 }
}

#declare cauda =
 cylinder {
 <0,0,0>,<-8,-6,0>,0.5
 texture { cor_pelo }
 }

#macro perna(ang_canela)

 union {
 cylinder {
 <0,0,0>,<0,0,-2.5>,0.65
 texture {cor_pelo}
 }

 sphere {
 <0,0,-2.5>,0.8
 texture {cor_pelo}
 }
 object { canela rotate ang_canela*x translate <0,0,-2.5>}
}
#end

#macro rato (ang_bracoEx, ang_bracoEy, ang_bracoEz, ang_antebracoE, ang_pernaE, ang_canelaE, ang_bracoDx, ang_bracoDy, ang_bracoDz, ang_antebracoD, ang_pernaD, ang_canelaD, ang_cabecaX, ang_cabecaZ, ang_cabecaY,angCauda)
 union {
    object { cabeca rotate ang_cabecaX*x rotate ang_cabecaY*y rotate ang_cabecaZ*z scale 0.7 translate <0,0,0>}
    object { pescoco }
    object { corpo }
  object { cauda rotate angCauda*y translate <0,0,-4.5> }
  object { perna(ang_canelaD) rotate ang_pernaD*y translate <-1.2,0,-5.75>}
  object { perna(ang_canelaE) rotate ang_pernaE*y translate <1.2,0,-5.75> }
  object { braco(ang_antebracoD,-1) rotate ang_bracoDx*x rotate ang_bracoDy*y
    rotate ang_bracoDz*z translate <-1.9,0,-2.1> }
  object { braco(ang_antebracoE,1) rotate ang_bracoEx*x rotate ang_bracoEy*y
    rotate ang_bracoEz*z translate <1.9,0,-2.1> }
 }
#end

object { rato(ang_rot_bracoEx, ang_rot_bracoEy, ang_rot_bracoEz, ang_rot_antebracoE, ang_rot_pernaE, ang_rot_canelaE, ang_rot_bracoDx, ang_rot_bracoDy, ang_rot_bracoDz, ang_rot_antebracoD,  ang_rot_pernaD, ang_rot_canelaD, ang_rot_cabecaX, ang_rot_cabecaZ, ang_rot_cabecaY,ang_rot_cauda) }

//  plane {
//  z, -11.75
//  pigment {
//    checker color rgb <0,0,0> color rgb <1,1,1>
//  }
//  }

// Original camera parameters:
// #local cam_ctr = <0.00,0.00,-3.00>
// #local cam_vec = (<0.00,20.0,0.00>-<0.00,0.00,-3.00>)
// #local cam_sky = z

#include "camlight.inc"
camlight(<0.00,0.00,-3.00>,<8,10,4>,20.0,z,1.0)