Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
    Über Variable in POV-Ray -
English English English

Home
- POV-Ray Tutorial

  - POV-Ray Details

  - Über Variable
      Vordefinierte Variable
  > #declare, #local
      Ausdrücke


  - Ein kurzes
    Include File Tutorial

                                                 

#declare und #local
Benutzer-definierte Bezeichner und Objekte
Wie definiert man eigene Variable und Objekte.

In der Szenen Beschreibungssprache (SDL) von POV-Ray gibt es
zwei Methoden zum Definieren eigener Variablen und Objekte: #declare oder #local.
Anmerkung: Um jegliche Kollision vordefinierten Variablen und reservierten Wörter in POV-Ray
zu vermeiden, ist es dringend empfohlen
, bei durch den Benutzer definierten Variablen
nur Worte zu verwenden, die mit Großbuchstaben beginnen.


Was kann man mittels #declare oder #local deklarieren?
Einige Beispiele:

Zahlenwerte, Kommawerte, Vektoren
#declare End = 5;     //
#local D = 0.35;    // distance between ... and ...
#declare Column_Height = 3.50; // height of a column
#declare StartPoint = <0, 2.5, 0.5*sqrt(3)>   // start point
#local Angle_1 = degrees( atan ( 2.5 / sqrt(2)); // angle value in degrees

 Texturen, Materialien, pigment, color, finish, normal
#declare My_Orange =  color rgb <1,0.6,0>;
#declare Orange_Plastic =
texture{ pigment{ My_Orange }
         finish { phong 1 reflection{ 0.1 metallic 0.1} }
       }  // end of texture
Geometrische Objekte.
#declare Column_01 = cone{ <0,0,0>,0.30,<0,4.00,0>, 0.25
                           texture{ Orange_Plastic }
                         } // end of Column_01
Achtung:
- Jedes #declare oder #local von Zahlen, Vektoren oder Farben (color) verlangt ein Semicolon am Ende!
- Ein erneutes declarieren eine Variablen überschreibt zuvor declarierte Werte.



- Warum ist die Verwendung von deklarierten Variablen anstelle von Zahlen so vorteilhaft?
Argumente:
Einfachere Handhabung, da weniger zu schreiben!
Es ist eine grundlegende Technik ím modularen Arbeiten! Wer sie nutzt ist erfolgreicher! - Besserer Überblick! (Erklärende Kommentare nicht vergessen!) [Klar, Sie wissen auch noch nach 8 Wochen was 'A' bedeutete, ... aber das sagen sie alle! :-) ]

- Werte, welche in mehreren Befehlen verwendet werden - für einfachere Änderung/Anpassung - gibt mehr Freiheit im Design!
Bei Änderungen müssen mehrfach benötigte Werte nicht an mehreren Stellen geändert werden! (schneller + weniger fehlerträchtig!) Beispiele: Höhe einer Säule, Texturen, ...

- Texturen, bevor sie an einem Objekt verwendet werden.
Dies erlaubt es sehr einfach einige Texturen später zu ändern.

- Erzeugung von neuen Objekten zur mehrfachen Verwendung in einer Szene.
Warum ist die Verwendung von deklarierten Objekten die mehrfach verwendet werden wichtig?
Argumente:
- verringerter Schreibaufwand, besonders bei Änderung des Objektes!
- Vorgefertigte Objekte ermöglichen eine modulare Bauweise die wesentlich übersichtlicher ist
   als lauter einzelne mehrfache Beschreibungen von Teilen.


'#declare' or '#local'? - Der Unterschied zwischen '#declare' und #local'.
Locale Bezeichner sind wichtig um eine Identifier Name Collisions (=Kollision der Bezeichnernamen) zu vermeiden.
Innerhalb einer Include-Datei oder innerhalb eines Makros (wzeischen dem Wort '#macro' und den dazugehörenden '#end') hat das definieren eines Bezeichners durch '#local' keine Wirkung auf Bezeichner gleichen Namens, die ausserhalb dieser Include-Datei oder diesee Makros deklariert wurden. Dies bedeutet es überschreibt temporär die Bezeichner gleichen Namens von ausserhalb ohne seinen Wert ausserhalb zu zerstören. Nach dem Einfügen einer Include-Datei oder nache dem Ende eines Makros werden alle lokal deklarierte Bezeichner zerstört.. Ein '#local' in der Hauptszenendatei ist identisch mit '#declare' (wenn es nicht in einer Include-Datei oder einem Makro ist).
Daraus resultiert: Man kann in einem Makro oder einer Indlude-Datei Bezeichner mit Namen verwenden die schon in der Hauptszenenedatei oder in anderen Makros oder Include-Dateien verwerdet wurden, ohne dadurch die entprechenden Bezeichner-Werte der Hauptszenendatei zu zerstören.
Zerstörung von Bezeichnern
Benutzerdefinierte Bezeichner können mittels "#undef MyVariable" zerstört werden.
Benutzerdefinierte Bezeichner können erzeugt werden abhängig davon, ob sie bislang noch nicht definiert sind:
"#ifndef ( MyVariable ) #declare MyVariable = 0.5; #end"
Dies ist eine elegante Methode um Objekte in Include-Dateien mit Grundeinstellungswerten (dafault values) zu erzeugen,
welche nötigensfalls vom Benutzer überschrieben werden können.
Siehe auch überschreibbaren



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