Descrizioni ed esempi per il raytracer POV-Ray di Friedrich A. Lohmüller
Esempi POV-Ray - Come fare oggetti per POV-Ray
English English English
Français français
Deutsch Deutsch

Home
- POV-Ray Tutorial

  - Esempi per POV-Ray
   Indice generale
  - Geometria
  - Architettura
    - Casa
    - Tetto
    - Torre
    - Castello
    - Finestra e Porta
    - Scale
    - Piramide
    - Colonna
    - Arco
    - Recinti
    - Mobili
    - Faccende di Casa
  - Tecnica
                                       
 
Tetto

  Tetto

Oggetti: "box", "plane".
Metodi: "difference", "union", "inverse", "#declare".
La costruzione di un Tetto:
con la utilizzazione intensive di "macro ".
Un file include per usare questo oggetto come un oggetto pronto per l'uso si trova su la mia paggina Oggetti POV-Ray.
Passo 1:
Una scatola sottile e una fila di cilindri:
Le tegole sono simulate con cilindri paralleli, con una testura di rige in direzione longitudinale ordinati con while loop.
Example roof part1 600x450
Passo 2:
Ritagliare diagonalmente:
La parte di tetto est posizionate per "rotate" e "translate" nella sua posizione finale. Poi questa parte est tagliate di due piani verticali diagonali per la forma.
#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 part 1:
La descrizione della scena per POV-Ray:
".txt" file o ".pov" file
Passo 3:
Posizionamento delle 4 parti di Tetto:
Il colmo del tetto e i punti di congiunzione laterali sono copèrti con cilindri per simulare le tegole di colmo.
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:
La descrizione della scena per POV-Ray:
".txt" file o ".pov" file
Oggetti pronto per l'uso per POV-Ray
come Archivi include con archivi esempio
si trova su la Paggina POV-Ray Objects.
top

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