Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
    POV-Ray Beispiele - Die Erstellung von Objekten für POV-Ray
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial

  - POV-Ray Beispiele
    Inhaltsübersicht
  - Geometrie
  - Architektur
    - Haus
    - Dach
    - Turm mit Zinnen
    - Schloss
    - Fenster u. Tür
    - Treppen
    - Pyramide
    - Säulen
    - Bogen
    - Zäune
    - Möbel
    - Haushalt
  - Technik
                                       
 
Dach

Dach

Objekte:    "box", "cylinder", "plane".
Methoden: "#declare", "union", "intersection", "macro", "while".
Die Konstruktion eines Walmdaches
mittels intensivem Gebrauch von "macro".
Eine Include-Datei mit der man dieses Objekt als Fertig-Objekt verwenden kann findet man auf meiner POV-Ray Objects-Seite.
Erster Schritt:
Ein flacher Quader und ein Bündel von Zylindern:
Die Dachziegel werden durch parallele Zylinder simuliert, welche in Längsrichtung eine Streifentextur besitzen und mittels einer While-Schleife plaziert werden.
Example roof part1 600x450
Zweiter Schritt:
Diagonales Abschneiden:
Der Teil des Daches wird durch Rotieren und Verschieben in seine endgültige Lage gebracht. Sodann wird er durch zwei diagonal verlaufende senkrecht stehende Ebenen auf seine endgültige Form zugeschnitten.
#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
Dach Teil I:
Szenenbeschreibung für POV-Ray:
".txt"-Datei oder ".pov"-Datei
Dritter Schritt:
Positionierung der 4 Teile des Daches:
Dabei werden der Dachfirst und die seitlichen Nähte des Daches mit Zylindern abgedeckt, welche die Firstziegel simulieren.
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 ------
Dach Macro:
Szenenbeschreibung für POV-Ray:
".txt"-Datei oder ".pov"-Datei
Gebrauchsferige POV-Ray Objekte als
Include-Dateien mit Beispieldateien findet man
auf der POV-Ray-Objects-Seite.
top

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