Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
    Bedingte Anweisungen - Anwendungen -
English English English

Home
- POV-Ray Tutorial

  - Bedingte
    Anweisungen

  Verzweigungen
   #if(...) ... #else ... #end
    - in Schleifen
    > in Macros
    - in Animationen
    - Ein-/Ausschalten von Teilen
   #switch(...) #case(..) ...
          #range(..) ... #end
    - Auswahl-Listen

  Existenz-Überprüfungen
   #ifdef(...) #ifndef(...)
    - Check in Include-Dateien
    - Defaults in Include-Dateien

  Schleifen
  Prechecked, Postchecked,
  Count-controlled, Early-Exit
   #while(...)... #end
   #for(...)... #end
    - Beispiele:
    - Schleifen in POV-Ray
    - Schleifen, Sinus, Kosinus
                                       

Verzweigungen in Makros

Beispiel für die Anwendung einer Einfach-Verzweigung mit #if in Makros:

//-----------------------------------------
#macro Glass_01( G_R, // radius of glass
                 G_H, // height of glass
                Merge_Flag//0=union;1=merge
               ) //------------------------
#if (Merge_Flag = 1)
merge{
#else
union{
#end // von "#if"

difference{
cylinder{<0,      0,0>,<0,G_H   ,0>,G_R }
cylinder{<0,G_R*.05,0>,<0,G_H+.1,0>,G_R*.9}
} // end of difference

torus{ G_R*0.95, G_R*0.05
       translate<0,G_H,0> }

} //end of union
#end // end of macro
//-----------------------------------------
//-----------------------------------------
global_settings{max_trace_level 10}
//-----------------------------------------
object{ Glass_01( 0.35, // radius of glass
                  0.90, // height of glass
                  0 // Merge_Flag
                ) //-----------------------
        texture{
          pigment{ color rgb<1,0.95,0.9>}
          finish { phong 1 reflection 0.05}
               } // end of texture
        translate<-0.5,0,-0.5>
      } //---------------------------------

object{ Glass_01( 0.35, // radius of glass
                  0.90, // height of glass
                  1 // Merge_Flag
                ) //-----------------------
        material{
         texture{
          pigment{ rgbf<.98,.98,.98,0.9>}
          finish { diffuse 0.1
                   reflection 0.2
                   specular .8
                   roughness .0003
                   phong 1 phong_size 400}
                } // end of texture
         interior{ ior 1.5 caustics 0.5
                } // end of interior
        } // end of material
        translate< 0.5,0,-0.5>
      } //---------------------------------
#if ... #else ... #end
 
Anmerkung: "merge" funktioniert ähnlich wie "union", beseitigt aber in der Verbindung der Körper alle innen liegende Flächen. Dadurch findet bei durchsichtigen Körpern an diesen inneren Flächen weder eine Reflektion noch Lichtbrechung statt - sie erscheinen wie aus einem Guß. Diese zusätzliche Rechenarbeit kann bei vielen innen liegenden Flächen dramatisch viel zusätzliche Zeit benötigen. Daher sollte man bei nichttransparenten Körpern zum Zusamenfügen immer nur "union" verwenden.

top

 
© Friedrich A. Lohmüller, 2010
homepage:www.f-lohmueller.de