#version unofficial MegaPov 0.5; #include "colors.inc" #include "metals.inc" //#include "textures.inc" //#include "stones.inc" #declare modclock=0.5;//1*clock; #macro step(timer,height,ex1,ex2) #local span=ex2-ex1; #declare Pos2 = spline { cubic_spline 0.0000, <0,0,ex1> 0.1250, <0,height, ex1+span/2> 0.2500, <0,0,ex2> 0.2625, <0,0,ex2-span/20> 0.3125, <0,0,ex2-span/4> 0.3750, <0,0,ex1+span/2> 0.4375, <0,0,ex1+span/4> 0.4875, <0,0,ex1+span/20> 0.5000, <0,0,ex1> 0.6250, <0,height,ex1+span/2> 0.7500, <0,0,ex2> 0.8125, <0,0,ex2-span/4> 0.8750, <0,0,ex1+span/2> 0.9375, <0,0,ex1+span/4> 1.0000, <0,0,ex1> } Pos2(mod(timer/2,0.5)+0.25) #end // John van Sickle // FindKnee(Ankle,Hip,Thigh,Shin,Direction) // A useful vector for animations, FindKnee( ) will return the location of a joint // in a limb when the other particulars of the limb are known. Ankle is the // location of one joint at one end of the limb, Hip is the location of the joint // at the other end, Thigh is the distance from Hip to the knee, Shin is the distance // from Ankle to the knee, and Direction is the direction in which the knee should // point. The macro will return the location of the knee. If the distance from Hip // to Ankle is greater than the sum of Thigh and Shin, a fatal error will occur. #macro FindKnee(pA,pH,lT,lS,vD) #local lB=vlength(pA-(pH)); #if( (lB>lT+lS) | (lT>lB+lS) | (lS>lT+lB) ) #error "Invalid span lengths.\n" $gk=1/0/0/0/0/0/0/0/0; #end #local tX=(lT*lT-lS*lS+lB*lB)/2/lB; #local tY=sqrt(lT*lT-tX*tX); #local vO=vnormalize(pA-(pH)); #local vF=vnormalize(vcross(vD,vO)); #local vU=vnormalize(vcross(vO,vF)); (pH+vO*tX+vU*tY) #end #macro myrote(v1,v2) < atan2(v2.z,v2.y)-atan2(v1.z,v1.y) , atan2(v2.x,v2.z)-atan2(v1.x,v1.z) , atan2(v2.x,v2.y)-atan2(v1.x,v1.y) > #end // By Rune Johansen, Thu, 6 Jul 2000 // Perpendiculize will adjust the vector V1 // so that it is perpendicular to the vector V2. // The input is V1 and V2, and the macro returns // the adjusted version of V1. #macro Perpendiculize (V1,V2) // by Rune S. Johansen vnormalize(vcross(vcross(V2,V1),V2)) #end // FindAngle will find the angle between V1 and V2. // The third parameter "About" is a vector which must be // perpendicular to both V1 and V2. If the rotation from // V1 to V2 about "About" is negative, the returned angle // is negative. ( When you look in the direction of "About" // clockwise is negative and anticlockwise is positive. ) // If you set "about" to <0,0,0> the returned angle will // always be positive (or zero). #macro FindAngle (V1,V2,About) degrees(acos(vdot(vnormalize(V1),vnormalize(V2)))) *(vdot(About,vcross(V1,V2))<0?-1:1) #end // Given 2 vectors, a vector for the X direction // (similar to the 1st - 3rd number in a matrix), // and one for the Y direction (similar to the // 4th - 6th number in a matrix), Vectors2Rotate will // return a rotation vector which will transform an // object in the same way as a matrix using the // vectors would do. VectorX and VectorY must be // perpendicular to each other. #macro Vectors2Rotate (VectorX,VectorY) // by Rune S. Johansen #local RotZ = FindAngle(x,,z); #local RotY = FindAngle(x,vrotate(VectorX,-RotZ*z),y); #local RotX = FindAngle(vrotate(y,<0,RotY,RotZ>),VectorY,VectorX); #end #macro Reorient(Axis1,Axis2) #declare vX1=vnormalize(Axis1); //john vansickle #declare vX2=vnormalize(Axis2); #declare vY=vnormalize(vcross(vX1,vX2)); #declare vZ1=vnormalize(vcross(vX1,vY)); #declare vZ2=vnormalize(vcross(vX2,vY)); matrix < vX1.x, vY.x,vZ1.x, vX1.y,vY.y,vZ1.y, vX1.z,vY.z, vZ1.z, 0,0,0 > matrix < vX2.x,vX2.y,vX2.z, vY.x,vY.y, vY.z, vZ2.x,vZ2.y,vZ2.z, 0,0,0 > #end #macro Oritransform(Axis1,Axis2) #declare vX1=vnormalize(Axis1); //john vansickle #declare vX2=vnormalize(Axis2); #declare vY=vnormalize(vcross(vX1,vX2)); #declare vZ1=vnormalize(vcross(vX1,vY)); #declare vZ2=vnormalize(vcross(vX2,vY)); transform{ matrix < vX1.x, vY.x,vZ1.x, vX1.y,vY.y,vZ1.y, vX1.z,vY.z, vZ1.z, 0,0,0 > matrix < vX2.x,vX2.y,vX2.z, vY.x,vY.y, vY.z, vZ2.x,vZ2.y,vZ2.z, 0,0,0 > } #end $f=array[2][5][5] // finger segment joint positions at rest from anatomy $fingtrans=array[2][5][4] // transformations to be performed on each of the finger segments $fingobj=array[2][5][4] // objects defining each of the finger segments $fingcrosser=array[5] // a vector to help keep track the various vectors //$fingang=array[2][5] // array of two by for fings 1,2,3,4 //$vv1=<1,1,1> //$vtransformer=transform{Reorient(vv1,<1,1,0>)} //$vv2=Reorient(vv1,<1,1,0>); //DO NOT MESS WITH THESE!! $headtop=<0,84.5,6>; $headrightmost=<5,81.3,6>; $headrightmost=<-5,81.3,6>; //$nosept=<0,74.5,11>; $headdepth=<0,81.3,1.6>; $chinpt=<0,74.5,11>; $headpvt=<0,77.6,6>; $rjawend=<4,75.6,7>; $ljawend=<-4,75.6,7>; $neckendpt=<0,70.6,4.5>; $rshouldpvt=<10,69,5>; $lshouldpvt=<-10,69,5>; $ribcagetop=<0,71,9.5>; $ribcagebot=<0,52.5,9>; $rribcagebot=<5.5,52.5,9>; $lribcagebot=<-5.5,52.5,9>; $hippvt=<0,49.5,7>; $rhiptop=<6.,50.5,8>; $lhiptop=<-6.,50.5,8>; $rfemextpt=<6.5,42.6,6.2>; $lfemextpt=<-6.5,42.6,6.2>; $rfempvt=<5,45.5,7.5>; $lfempvt=<-5,45.5,7.5>; $rkneept=< 3,22,6>; $lkneept=<-3,22,6>; $rankpt=< 2.5,2.5,4.8>; $lankpt=<-2.5,2.5,4.8>; $rfootbackpt=< 2.5,0,2>; $lfootbackpt=<-2.5,0,2>; $rtoeballpt=< 2.5,0,10>; $ltoeballpt=<-2.5,0,10>; $rtoetippt=< 2.5,0,14>; $ltoetippt=<-2.5,0,14>; $rfoottop=< 2.5,4.5,6.0>; $lfoottop=<-2.5,4.5,6.0>; $relbowpt=< 10.5,54,5>; $lelbowpt=<-10.5,54,5>; $rwristpt=< 14.89,41.89,6.74>;//< 16,41.89,6.44>; $lwristpt=<-14.89,41.89,6.74>; $rfingtippt=< 16,34.2,10>; $lfingtippt=<-16,34.2,10>; //$rthumbpvt=<8.5,39.5,5.5>; //$lthumbpvt=<-8.5,39.5,5.5>; //$rthumbend=<8,36,6>; //$lthumbend=<-8,36,6>; $ribpvt=<0,56.5,5.8>; $reyecent=<1.5,80,10.2>; $leyecent=<-1.5,80,10.2>; $jawpvt=<0,77.5,8.5>; $rjawpt=<2.8,77.5,8.5>; $ljawpt=<-2.8,77.5,8.5>; $headfront=<0,81, 11.2>; $rclaviclepvt=< 1.2,70.5,9.5>; $lclaviclepvt=<-1.2,70.5,9.5>; $rclavendpt=< 10.5,70.5,6.5>; $lclavendpt=<-10.5,70.5,6.5>; //note for further improvement here: fix the x distance so not all fings exact same. //Knuckles: 0 is knuckle, fingertip is "3", metacarpal is "4" //fingers: 1 is index, 2 is middle, 3 is ring, 4 is pinkie 0 is thumb //hands: 0 is left, 1 is right //HAND FING KNUCK $f[0][1][0]=< -16.8 , 37.7 , 7.37 >;//Left fing1 knuck $f[0][1][1]=< -16.9 , 35.9 , 8.07 >; $f[0][1][2]=< -17.0 , 34.3 , 8.37 >; $f[0][1][3]=< -17.0 , 33.4 , 8.70 >; $f[0][1][4]=< -15.77 , 41.55 , 7.14 >; $f[0][2][0]=< -15.6 , 37.25 , 7.04 >; $f[0][2][1]=< -15.9 , 35.38 , 7.81 >; $f[0][2][2]=< -16.1 , 34.39 , 8.25 >; $f[0][2][3]=< -16.2 , 33.49 , 8.77 >;// come back to fix! $f[0][2][4]=< -15.12 , 40.68 , 7.14 >; $f[0][3][0]=< -14.5 , 37.8 , 7.04 >; $f[0][3][1]=< -14.6 , 36.0 , 7.81 >; $f[0][3][2]=< -15.0 , 34.6 , 8.25 >; $f[0][3][3]=< -15.1 , 33.8 , 8.77 >; $f[0][3][4]=< -14.50 , 40.68 , -16.04 >; //was z of 6.04 $f[0][4][0]=< -13.7 , 38.47 , 7.04 >; $f[0][4][1]=< -13.7 , 36.98 , 7.81 >; $f[0][4][2]=< -13.8 , 36.0 , 8.25 >; $f[0][4][3]=< -13.9 , 35.5 , 8.77 >; //fing 0 is thumb, 1 is index, 4 is pinkie $f[0][4][4]=< -13.94 , 40.63 , 6.54 >; $f[0][0][0]=< -16.42 , 41.5 , 7.22 >; $f[0][0][1]=< -17.87 , 40.3 , 8.73 >; $f[0][0][2]=< -18.75 , 39.1 , 9.80 >; $f[0][0][3]=< -19.37 , 38.2 , 10.39 >; $f[0][0][4]=< -15.71 , 41.83 , 6.77 >; $f[1][1][0]=< 16.8 , 37.7 , 7.37 >;//Right fing1 knuck $f[1][1][1]=< 16.9 , 35.9 , 8.07 >; $f[1][1][2]=< 17.0 , 34.3 , 8.37 >; $f[1][1][3]=< 17.0 , 33.4 , 8.70 >; $f[1][1][4]=< 15.77 , 41.55 , 7.14 >; $f[1][2][0]=< 15.6 , 37.25 , 7.04 >; $f[1][2][1]=< 15.9 , 35.38 , 7.81 >; $f[1][2][2]=< 16.1 , 34.39 , 8.25 >; $f[1][2][3]=< 16.2 , 33.49 , 8.77 >;// come back to fix! $f[1][2][4]=< 15.12 , 40.68 , 7.14 >; $f[1][3][0]=< 14.5 , 37.8 , 7.04 >; $f[1][3][1]=< 14.6 , 36.0 , 7.81 >; $f[1][3][2]=< 15.0 , 34.6 , 8.25 >; $f[1][3][3]=< 15.1 , 33.8 , 8.77 >; $f[1][3][4]=< 14.50 , 40.68 , 7.14 >; //z was 6.04 $f[1][4][0]=< 13.7 , 38.47 , 7.04 >; $f[1][4][1]=< 13.7 , 36.98 , 7.81 >; $f[1][4][2]=< 13.8 , 36.0 , 8.25 >; $f[1][4][3]=< 13.9 , 35.5 , 8.77 >; //fing 0 is thumb, 1 is index, 4 is pinkie $f[1][4][4]=< 13.94 , 40.63 , 7.14 >; //z was 6.05 $f[1][0][0]=< 16.42 , 41.5 , 7.22 >; $f[1][0][1]=< 17.87 , 40.3 , 8.73 >; $f[1][0][2]=< 18.75 , 39.1 , 9.80 >; $f[1][0][3]=< 19.37 , 38.2 , 10.39 >; $f[1][0][4]=< 15.71 , 41.83 , 6.77 >; #declare foRearm=relbowpt-rshouldpvt; #debug str(foRearm.x,9,4) #debug str(foRearm.y,9,4) #debug str(foRearm.z,9,4) #debug "\n\n" //these are user-defined variables, these not affected by FK/IK $lumbarang= < 10, 0,-0>; $headang= <0,0,0>; //<-10, 10*cos(2*pi*modclock+pi), 0>; $neckang= <-20,0,0>; // <-15+10*cos(4*pi*modclock), 0,-0>; $jawrot= < 0, 0, 0>; $ribang= <0,0,0>;//< 15, -15*cos(2*pi*modclock+pi), 10*cos(2*pi*modclock+pi)>; $hipang= <0,0,0>;//< 0, 15*cos(2*pi*modclock), 5*cos(2*pi*modclock)>; $rwristang= <0,-0,0>; $lwristang= <0,0,0>; $rf=//0; // 100; $lf=//0; // -100; $rfingang= array[5] {rf,rf,rf,rf,rf} // 0 is left hand, index,middle, ring, pinkie $lfingang= array[5] {lf,lf,lf,lf,lf} // 1 is right hand, index,middle, ring, pinkie $fkarm=yes ; //yes means arms are FK, no means IK $fkleg=no; //yes means arms are FK, no means IK $rclavang=<0,0,0>; $lclavang=<0,0,-0>; //these user-defined variables only used for FK arms $rshouldang= < 0,0,0>; $lshouldang= <-0,0,-0>; $relbowang= <-0,0,0>; $lelbowang= <-0,0,0>; //these user-defined variables only used for IK arms $relbowpoint=<1,-.35,0>;//-y;//x-0.1*z; $lelbowpoint=<-.4,-1,0>;//-y;//x-0.1*z; $rtempwristpt=//< 1,65+4*sin(4*pi*modclock), 20+3*cos(4*pi*modclock)>; <-1,68,22>; $ltempwristpt=<1,58,22>; //<-1,65+4*sin(4*pi*modclock+pi/2),32+3*cos(4*pi*modclock+pi/2)>; // //$ltempwristpt=<-1,50,20>; //$rtempwristpt=<9,60,20>; //$ltempwristpt=<-9,60,20>; //$lwristpt=<-9,41,5>; // note this is rest position //these user-defined variables only used for FK legs $rfemurang=<-20,0,0>; $lfemurang=<0,0,0>; $rkneeang= <40,0,0>; $lkneeang= <0,0,0>; $rankang= <-35,0,0>; $lankang= <-10,0,0>; $rtoeptang=<0,0,0>; $ltoeptang=<0,0,0>; //these user-defined variables only used for IK legs // #macro step(timer,height,ex1,ex2) $hiplift=//<0,0,0>; <0,.1*(1-cos(2*pi*modclock)),0>; $rtemptoeballpt=+step(modclock+0.0,6,-10,25); // BTW $rtoeballpt=<2,1.5,10>; $ltemptoeballpt=+step(modclock+0.5,6,-10,25); // BTW $rtoeballpt=<2,1.5,10>; //$ltemptoeballpt=<-2,10,0>; #macro lfs(a) #declare lfs1 = spline { linear_spline 0.00, 0 0.25, 0 0.50,45, 1.00, 0 } #declare pain=<0,0,0>+lfs1(mod(a,1)); pain.x #end //$rfootliftang=<0,0,0>; $rfootliftang=; $lfootliftang=; #declare eyepigs= pigment { gradient z pigment_map{ [0 Black] [0.1 White] [1 White] } } //sphere{rtemptoeballpt,2 pigment{Yellow} finish{ambient 1}} //$rtempshouldpt=vtransform(rshouldpvt-rclaviclepvt, transform{rshouldtrans}); //$ltempshouldpt=vtransform(lshouldpvt-rclaviclepvt, transform{lshouldtrans}); //transform definitions $lumbartrans= transform{rotate lumbarang translate hippvt +hiplift } $ribtrans= transform{rotate ribang translate ribpvt-hippvt transform{lumbartrans}} $rclavtrans= transform{rotate rclavang translate rclaviclepvt-ribpvt transform{ribtrans}} $lclavtrans= transform{rotate lclavang translate lclaviclepvt-ribpvt transform{ribtrans}} //$rtempshouldpt=vtransform(rshouldpvt transform{rclaveffect} ); //$rshouldtrans=transform{translate rshouldpvt-ribpvt transform{ribtrans}} //$lshouldtrans=transform{translate lshouldpvt-lclaviclepvt transform{lclavtrans}} $necktrans=transform{rotate neckang translate neckendpt-ribpvt transform{ribtrans}} $headtrans=transform{rotate headang translate headpvt-neckendpt transform{necktrans}} $hiptrans= transform{rotate hipang translate hippvt+hiplift} $jawtrans= transform{rotate jawrot transform{headtrans}} //$rshouldtrans=vtransform(rshouldpvt-rclaviclepvt rotate rclavang translate rclaviclepvt-ribpvt transform{ribtrans}) //$lshouldtrans=vtransform(lshouldpvt-lclaviclepvt rotate lclavang translate lclaviclepvt-ribpvt transform{ribtrans}) $rnewshouldpt=vtransform(rshouldpvt-rclaviclepvt rotate rclavang translate rclaviclepvt); $lnewshouldpt=vtransform(lshouldpvt-lclaviclepvt rotate lclavang translate lclaviclepvt); #if (fkarm) $rhumerustrans=transform{rotate rshouldang translate rnewshouldpt-ribpvt transform{ribtrans}} $lhumerustrans=transform{rotate lshouldang translate lnewshouldpt-ribpvt transform{ribtrans}} $rforearmtrans=transform{rotate relbowang translate relbowpt-rshouldpvt transform{rhumerustrans}} $lforearmtrans=transform{rotate lelbowang translate lelbowpt-lshouldpvt transform{lhumerustrans}} $rwristtrans=transform{rotate rwristang translate rwristpt-relbowpt transform{rforearmtrans}} $lwristtrans=transform{rotate lwristang translate lwristpt-lelbowpt transform{lforearmtrans}} $fingtrans[1][1][1]=transform{rotate lwristang translate lwristpt-lelbowpt transform{lforearmtrans}} #else $rtempshouldpt=vtransform(rnewshouldpt-ribpvt, transform{ribtrans}); $ltempshouldpt=vtransform(lnewshouldpt-ribpvt, transform{ribtrans}); //FindKnee(Ankle,Hip,Thigh,Shin,Direction) $rtempelbowpt=FindKnee(rtempwristpt,rtempshouldpt,vlength(rshouldpvt-relbowpt),vlength(relbowpt-rwristpt),relbowpoint); $ltempelbowpt=FindKnee(ltempwristpt,ltempshouldpt,vlength(lshouldpvt-lelbowpt),vlength(lelbowpt-lwristpt),lelbowpoint); $rhumerustrans=transform{Oritransform(relbowpt-rshouldpvt,rtempelbowpt-rtempshouldpt) translate rtempshouldpt} $lhumerustrans=transform{Oritransform(lelbowpt-lshouldpvt,ltempelbowpt-ltempshouldpt) translate ltempshouldpt} $rforearmtrans=transform{Oritransform(rwristpt-relbowpt,rtempwristpt-rtempelbowpt) translate rtempelbowpt} $lforearmtrans=transform{Oritransform(lwristpt-lelbowpt,ltempwristpt-ltempelbowpt) translate ltempelbowpt} // $rwristtrans=transform{rotate rwristang translate rtempwristpt-rtempelbowpt transform{rforearmtrans}} $rwristtrans=transform{rotate rwristang translate rwristpt-relbowpt transform{rforearmtrans}} $lwristtrans=transform{rotate lwristang translate lwristpt-lelbowpt transform{lforearmtrans}} //$lwristtrans=transform{rotate lwristang translate ltempwristpt-ltempelbowpt transform{lforearmtrans}} #end #if (fkleg) $rfemurtrans=transform{rotate rfemurang translate rfempvt-hippvt transform{hiptrans}} $lfemurtrans=transform{rotate lfemurang translate lfempvt-hippvt transform{hiptrans}} $rshintrans=transform{rotate rkneeang translate rkneept-rfempvt transform{rfemurtrans}} $lshintrans=transform{rotate lkneeang translate lkneept-lfempvt transform{lfemurtrans}} $rfoottrans=transform{rotate rankang translate rankpt-rkneept transform{rshintrans}} $lfoottrans=transform{rotate lankang translate lankpt-lkneept transform{lshintrans}} $rtoetiptrans=transform{rotate rtoeptang translate rtoeballpt-rankpt transform {rfoottrans}} $ltoetiptrans=transform{rotate ltoeptang translate ltoeballpt-lankpt transform {lfoottrans}} #else $rtemprankpt=rtemptoeballpt+vrotate((rankpt-rtoeballpt),rfootliftang); $rtempfempvt=hippvt+hiplift+vrotate((rfempvt-hippvt),hipang); $rtempkneept=FindKnee(rtemprankpt,rtempfempvt,vlength(rfempvt-rkneept),vlength(rkneept-rankpt),z); //$rfemobj=object{rfemobj Reorient(rkneept-rfempvt,rtempkneept-rtempfempvt)} //$rshinobj=object{rshinobj Reorient(rankpt-rkneept,rtemprankpt-rtempkneept)} $rfemurtrans=transform{Oritransform(rkneept-rfempvt,rtempkneept-rtempfempvt) translate rtempfempvt} $rshintrans= transform{Oritransform(rankpt-rkneept,rtemprankpt-rtempkneept) translate rtempkneept} $rfoottrans= transform{rotate rfootliftang translate rtemprankpt} $rtoetiptrans=transform{rotate rtoeptang translate rtemptoeballpt} //$ltemplankpt=ltemptoeballpt+vaxis_rotate((lankpt*z-ltoeballpt*z),x,lfootliftang.x); $ltemplankpt=ltemptoeballpt+vrotate((lankpt-ltoeballpt),lfootliftang); $ltempfempvt=hippvt+hiplift+vrotate((lfempvt-hippvt),hipang); $ltempkneept=FindKnee(ltemplankpt,ltempfempvt,vlength(lfempvt-lkneept),vlength(lkneept-lankpt),z); //$lfemobj=object{lfemobj Reorient(lkneept-lfempvt,ltempkneept-ltempfempvt)} //$lshinobj=object{lshinobj Reorient(lankpt-lkneept,ltemplankpt-ltempkneept)} $lfemurtrans=transform{Oritransform(lkneept-lfempvt,ltempkneept-ltempfempvt) translate ltempfempvt} $lshintrans= transform{Oritransform(lankpt-lkneept,ltemplankpt-ltempkneept) translate ltempkneept} $lfoottrans= transform{rotate lfootliftang translate ltemplankpt} $ltoetiptrans=transform{rotate ltoeptang translate ltemptoeballpt} #end //#debug "\n \n " #debug str(rfootliftang.z,3,3) #debug "\n \n " //#debug "\n \n " #debug str(ltemplankpt.x,3,3) #debug "\n \n " #declare o=1; //this one starts at one because not messing with thumb right now #while(o<5) //#debug "\n" //#debug str(o,6,4) $fingtrans[0][o][0]=transform{rotate translate f[0][o][0]-lwristpt transform{lwristtrans}} $fingtrans[1][o][0]=transform{rotate translate f[1][o][0]-rwristpt transform{rwristtrans}} $fingtrans[0][o][1]=transform{rotate translate f[0][o][1]-f[0][o][0] transform{fingtrans[0][o][0]}} $fingtrans[1][o][1]=transform{rotate translate f[1][o][1]-f[1][o][0] transform{fingtrans[1][o][0]}} $fingtrans[0][o][2]=transform{rotate translate f[0][o][2]-f[0][o][1] transform{fingtrans[0][o][1]}} $fingtrans[1][o][2]=transform{rotate translate f[1][o][2]-f[1][o][1] transform{fingtrans[1][o][1]}} #declare o=o+1; #end //$rtempshouldpt=vtransform(rshouldpvt-ribpvt, transform{ribtrans}) //$ltempshouldpt=vtransform(lshouldpvt-ribpvt, transform{ribtrans}) #include "mimeobjects06.pov" //display $body=union{ object{reyeobj transform{headtrans}} object{leyeobj transform{headtrans}} object{jawobj transform{jawtrans}} object{lumbarobj transform{lumbartrans}} object{headobj transform{headtrans}} object{neckobj transform{necktrans}} object{rhumerusobj transform{rhumerustrans}} object{lhumerusobj transform{lhumerustrans}} object{rforearmobj transform{rforearmtrans}} object{lforearmobj transform{lforearmtrans}} object{rwristobj transform{rwristtrans}} object{lwristobj transform{lwristtrans}} object{rclavobj transform{rclavtrans}} object{lclavobj transform{lclavtrans}} object{ribobj transform{ribtrans}} object{hipobj transform{hiptrans}} object{rfemobj transform{rfemurtrans}} object{lfemobj transform{lfemurtrans}} object{rshinobj transform{rshintrans}} object{lshinobj transform{lshintrans}} object{rfootobj transform{rfoottrans}} object{lfootobj transform{lfoottrans}} object{rtoetipobj transform{rtoetiptrans}} object{ltoetipobj transform{ltoetiptrans}} //sphere{rtempshouldpt,1.4 pigment {Red}} #declare n=0; #while (n<2) #declare o=1; //this one starts at one because not messing with thumb right now #while(o<5) #declare p=0; #while(p<2) object{fingobj[n][o][p] transform fingtrans[n][o][p]} #declare p=p+1; #end #declare o=o+1; #end #declare n=n+1; #end //sphere{rtempshouldpt,2 pigment{Red} finish{ambient 1}} //sphere{rtempwristpt,2 pigment{Red} finish{ambient 1}} //sphere{rtemprankpt,2 pigment{Red} finish{ambient 1}} //sphere{rtempkneept,1 pigment{Red} finish{ambient 1}} //sphere{rtempfempvt,1 pigment{Red} finish{ambient 1}} //sphere{rtemptoeballpt,2 pigment{Red} finish{ambient 1}} pigment {White} finish{ambient .25} //pigment {checker Black, White} //texture{T_Copper_1E finish{ambient .25}} //translate <0,-6,0> } object{body rotate <0,45,0>translate <40,0,0>} object{body rotate <0,90,0> translate <-10,0,0>} object{body rotate <0,180,0> translate <-40,0,0>} camera { //location <0,185,-300> look_at <-30,40,0> angle 10 location <0,90,-350> look_at <-0,40,0> angle 20 } plane {y,5 pigment { White} //pigment {checker Black, White} } cylinder{<-40,5,-100>,<-40,5,100>,1} light_source{<170,200,-120>rgb <0.85,0.5,0.35>} light_source{<-100,200,-50>rgb <0.35,0.5,0.85>} //blob{threshold 0.5 cylinder {1,2,0.5,1 transform{lshintrans}} cylinder {1,2,0.5,1 transform{rshintrans}} }