Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
      Objets POV-Ray - Comment faire des objets pour POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- POV-Ray Tutorial

  - Exemples POV-Ray
   Table des matières
  - Géométrie
  - Architecture
    - Maison
    - Toit
    - Tour
    - Châteaux
    - Fenêtre + Porte
    - Escaliers
    - Pyramide
    - Colonne
    - Arc, Arche
    - Clôtures
    - Meubles
    - Ménage
  - Technique
                                       
 
Toit

  Toit

Objets:   "box", "cylinder", "plane".
Méthodes: "#declare", "union", "intersection", "macro", "while".
La Constuction d'un Toit
avec utilisation intensive de "macro".
Un ficher include pour utiliser cet objet comme un objet prêt à l'usage vous pouvez trouver sur mon site Objets POV-Ray.
pas 1 :
Un parallélépipède rectangle minice et une botte de cylindres:
Les tuiles sont simulées par cylindres parallèles avec un dessin à rayures longitudinal arrangée avec une boucle while.
Example roof part1 600x450
Pas 2:
Découper en diagonale:
La section du toit est positionnée avec "rotate" et "translate" en sa position finale. Puis est coupée par deux plans verticals en diagonale .
#macro Roof_quarter
    ( RAngle,  // roof angle
      RLen,    // roof length
      RWidth,  // roof width
      ROver,   // overhang
      RRCyl,   // radius cylinders
      RCylDist // distance cylinders
    )//--------------------------
 #local RSteep = // roof steep len
  sqrt( pow(RLen,2)
       +pow(RLen*tan(radians(RAngle)),2));
//----------------------------------------
intersection{ //a box with cylinders
 union{
  box {<-ROver,0,-ROver>,
       < RSteep,0.01,RWidth+ROver>
       texture{Roof2}}
   #declare Nr = 0;     // start
   #declare EndNr =
           (RWidth+2*ROver)/RCylDist;
   #while (Nr< EndNr)
   cylinder {<-ROver-0.01,0,0>,
             <RSteep,0,0>, RRCyl
             texture{Roof1}
   translate<0,0,-ROver+Nr*RCylDist>}
   #declare Nr = Nr + 1;    // next Nr
   #end // --------------- end of the loop
  rotate<0,0,RAngle>}// end of union
 //cut off by diagonal planes:
 plane{<1,0,0>, 0  rotate<0, 45,0>
       texture{Roof1}}
 plane{<1,0,0>, 0  rotate<0,-45,0>
       translate<0,0,RWidth>
       texture{Roof1}}

 bounded_by{
  box{<-ROver     ,-RRCyl,-ROver>,
      <RLen+RSteep, RRCyl,RWidth+2*ROver>}
      rotate<0,0,RAngle> }
 }//--------- end of intersection
#end // end of macro


//-------------------------------------
Example roof part1 600x450
Roof parte 1:
Description de la scène pour POV-Ray:
fichier ".txt" fichier ".pov"
Pas 3 :
Positionner les 4 parties du toit:
L'arête du toit et les intersections latérales sont recouvertes avec cylindres pour simuler les tuiles du faîte.
Example roof part2 600x450
// -------------------------- macro RoofHeight(...)-------
#macro RoofHeight(Len,Angle)
 Len*tan(radians(Angle))
#end
// -------------------------- macro RoofDiag(...)---------
#macro RoofDiag (ROver, R_Len, R_Angle, RoCyl_R)
 #local RXOver =  ROver*cos(radians(RoofAngle));
 #local RYOver =  ROver*sin(radians(RoofAngle));
  cylinder{<-RXOver,-RYOver,-RXOver>,
           <R_Len,RoofHeight(R_Len,R_Angle),R_Len>,
           1.2*RoCyl_R
           texture{Roof1 rotate<0,-45,R_Angle>}}
#end // end of macro

// --------------------------- macro Roof(...) -----------
#macro Roof (RoAngle1, // roof angle
             RoLen_X11,// lenght in x
             RoLen_X12,// lenght in z
             RoWideZ11,// width x parts
             RoWideZ12,// width z parts
             RoOver,   // overhang
             R_Cyl,    // radius cylinders
             Cyl_D)    // distance cylinders
 union{
 object{ Roof_quarter(RoAngle1,RoLen_X11,RoWideZ11,
                      RoOver,R_Cyl,Cyl_D)
                           translate<        0,0,0>}
 object{ Roof_quarter(RoAngle1,RoLen_X11,RoWideZ11,
                      RoOver,R_Cyl,Cyl_D)
         scale<-1,1,1>  translate<RoWideZ12,0,0>}
 object{ Roof_quarter(RoAngle1,RoLen_X12,RoWideZ12,
                      RoOver,R_Cyl,Cyl_D)
         rotate<0, 90,0>translate<0.00,0,RoWideZ11>}
 object{ Roof_quarter(RoAngle1,RoLen_X12,RoWideZ12,
                      RoOver,R_Cyl,Cyl_D)
         rotate<0,-90,0>translate<RoWideZ12,0,0>}
 union{
  object{ RoofDiag (RoOver, RoLen_X11, RoAngle1, R_Cyl)
                             translate<       0,0,0>}
  object{ RoofDiag (RoOver, RoLen_X11, RoAngle1, R_Cyl)
          rotate<0,-90,0> translate<RoWideZ12,0,0>}
  object{ RoofDiag (RoOver, RoLen_X11, RoAngle1, R_Cyl)
          rotate<0,180,0> translate<RoWideZ12,0,RoWideZ11>}
  object{ RoofDiag (RoOver, RoLen_X11, RoAngle1, R_Cyl)
          rotate<0, 90,0> translate<        0,0,RoWideZ11>}

  cylinder{<0,0,0>,<0,0,RoWideZ11-RoWideZ12>,1.2*R_Cyl
           translate<RoLen_X11,
                        RoHeight(RoLen_X11,
                        RoAngle1),RoLen_X12>
            texture{Roof1 rotate<0,90,0>}
          }// end of cylinder
 translate<0,0.05,0>}
} #end // -----------------end of Roof(...) macro ------
Roof Macro:
Description de la scène pour POV-Ray:
fichier ".txt" ou fichier ".pov"
Objets prêt à l'usage pour POV-Ray comme
fichiers include avec fichiers exemple
on peut trouver sur la POV-Ray Objects page.
top

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