Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
  Objets Géométriques de POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- Tutorièl POV-Ray
 
Objets Géométriques
   table des matières

Objets de "shapes3.inc"
- Segment_of_CylinderRing
- Segment_of_Torus
>Segment_of_Object
- Egg
- Egg_Shape
- Facetted_Egg
- Facetted_Egg_Shape
- Facetted_Sphere
- Ring_Sphere
- Column_N
- Column_N_AB
- Pyramid_N
- Pyramid_N_AB
- Round_Pyramid_N_out
- Round_Pyramid_N_in
- Round_Cylinder_Tube
- Rounded_Tube_AB
- Rounded_Tube
- Round_N_Tube_Polygon
- Round_Conic_Torus
- Round_Conic_Prism
- Half_Hollowed_Rounded_Cyl1
- Half_Hollowed_Rounded_Cyl2

 
                                       
Cette forme est définie dans mon include file "shapes3.inc" ( anciennement "shapes_lo.inc" ) . Segment_of_Object, segment d'un objet

Segment_of_Object
syntaxe générale :

object{ Segment_of_Object( Moi_Objet,
                           Segment_Angle
                         ) //------------
        texture{ ... ... }
        scale<1,1,1>
        rotate<0,0,0>
        translate<0,0,0>
      } // end of object ----------------
Moi_Objet = un objet declaré,
Segment_Angle = l'angle du segment, orienté à main gauche. !

Exemple:
#declare My_Test_Object =
difference{
 sphere{ <0,0,0>, 2.75
         texture{ pigment{ color rgb<0.5,1,0>}
                  finish { phong 1}
                } // end of texture
       }  // end of sphere -------------------
 sphere{ <0,0,0>, 2.25
         texture{ pigment{ color rgb<1,0.6,0>}
                  finish { phong 1}
                } // end of texture
       }  // end of sphere -------------------
 cylinder{ <0,-3.5,0>,<0,3.5,0>, 1.5
           texture{ pigment{ color rgb<1,1,1>}
                    finish { phong 0.5}
                  } // end of texture
         } // end of cylinder  ---------------
  scale<1,0.6,1>
} // end of difference -----------------------
//--------------------------------------------
#include "shapes3.inc"
//--------------------------------------------
object{ Segment_of_Object(My_Test_Object,-235)
        texture{ pigment{ color rgb<1,1,1>}
                 finish { phong 1}
               } // end of texture
      }
// -------------------------------------------
Un autre exemple :
Segment_of_Object Segment_of_Object
L'objet originale Segment_Angle = 225

La macro en détail
En ce qui concerne la méthode de découper le segment avec deux parallélépipèdes,
on peut voir les illustrations des macros précédentes.
Le dimensions des parallélépipèdes usées ici pour découper le segment, sont calculées
automatiquement avec les fonctions "min_extent ( Object )" et "max_extent ( Object )" :

//-----------------------------Segment_of_Object macro()
#macro Segment_of_Object( SEgment_OBject, Segment_Angle)
#local D = 0.0001; // just a little bit
#if (Segment_Angle = 0)
    #local Segment_Angle = D;
#end
#if (abs(Segment_Angle) >= 360)
    #local Segment_Angle = mod (Segment_Angle, 360);
#end
#local O_min = min_extent ( SEgment_OBject );
#local O_max = max_extent ( SEgment_OBject );

#local O_max_x = max (O_min.x, O_max.x);
#local O_max_z = max (O_min.z, O_max.z);

#local R_max = 1.5*max(O_max_x,O_max_z);

#if (Segment_Angle > 0)
   #local Box_z = R_max+D;
#else
   #local Box_z = -R_max+D;
#end

 intersection{
  object{ SEgment_OBject }

  #if (abs(Segment_Angle) >= 180)
  union{
  #end // then use union!
   box{<-R_max+D,O_min.y-D,0>,<R_max+D,O_max.y+D,-Box_z>
      }// end of box
   box{<-R_max+D,O_min.y-D,Box_z>,<R_max+D,O_max.y+D,0>
       rotate<0, Segment_Angle,0>
      }// end of box
  #if (abs(Segment_Angle) >= 180)
   } // end of union
  #end // end of union, if union is used!

} // end of intersection

#end // -------------- end of macro Segment_of_Object()

© Friedrich A. Lohmüller, 2013
www.f-lohmueller.de