Raytracing mit POV-Ray: Körper


Wir wollen nun nicht nur eine Ebene und eine Kugel gestalten, sondern auch andere Objekte. Dazu fangen wir mit einfachen Körpern an, kombinieren diese zu neuen Körpern und gehen dann zu komplexeren Objekten über.

Der Quader Bearbeiten

Quader werden mit dem Schlüsselwort "box" gekennzeichnet:

box{<0,0,0>,<2,2,2>
   pigment{color Yellow}}

Diese Anweisung erstellt nun einen gelben Würfel, dessen eine Ecke sich am Ursprung und die andere Ecke am Punkt 2,2,2 im dreidimensionalen Koordinatensystem befindet.

Die beiden Zahlengruppen bilden die Eckpunkte des Quaders. Das Element "pigment" haben Sie schon auf den vorangehenden Seiten kennengelernt.

Die Kugel Bearbeiten

Die Kugel lässt sich mit dem Schlüsselwort "sphere" darstellen:

sphere{<5,5,5>,1
 pigment{color Red}
 }

Auf dem Bild ist dann eine rote Kugel am Punkt <5,5,5> mit dem Radius 1 zu sehen.


Der Zylinder Bearbeiten

Mit dem Zylinder lassen sich sehr viele Gegenstände darstellen wie z.B. Säulen,Räder oder Schornsteine. Er wird mit dem Schlüsselwort "cylinder" gekennzeichnet.

cylinder{<0,0,0>,<0,0,10>,1
    pigment{color Red}
}

Dies ergibt einen roten Zylinder mit dem Radius 1, der die y-Achse bildet. Die erste Zahlengruppe gibt den ersten Punkt, die zweite Zahlengruppe den zweiten Punkt im Koordinatensystem an. Die Zahl danach ist der Radius des Zylinders. Mit dem Zusatz open läßt sich eine Röhre erzeugen.

Der Kegel Bearbeiten

Hiermit lassen sich alle möglichen spitzen Gegenstände darstellen wie z.B. die Spitze eines Stiftes oder die Spitze eines Kirchturms. Für einen grünen Kegel, der sich direkt auf dem oben beschriebenen Zylinder befindet ergäben sich folgende Code-Zeilen:

cone{<0,0,10>,1,<0,0,12>,0
  pigment{color Green}
  }

Die erste Zahlengruppe gibt wie beim Zylinder die erste Koordinate an darauf folgt dann der Radius an dieser Stelle und der zweite Punkt mit Radius.

Der Torus/Reifen Bearbeiten

Um Schwimmringe, Reifen, Donuts oder ähnliches zu zeigen benutzt man das "torus"-Objekt.

torus{ 1,0.2
  translate<0,0,13>
  pigment{color Orange}
  }

Dieses Stück Code würde nun dem Turm mit Spitze noch einen orangenen Heiligenschein verpassen. Die beiden Zahlen geben die Radien des Reifens an: Die erste den Radius des Reifens, die zweite die "Dicke" des Reifens.

Mit der translate-Anweisung kann man allgemein Objekte verschieben. In diesem Fall ist sie notwendig, da der Reifen sich sonst immer am Punkt <0,0,0> befinden würde. Siehe Transformationen.


Die Scheibe Bearbeiten

Um etwa runde Tischplatten oder CDs zu erstellen kann man das "disc"-Objekt verwenden.

disc {
 <0,0,0>
 z, 1.0, 0.2
 pigment { color Orange }
}

Nach dem Rendern sollte eine Orange Scheibe mit Loch in der Mitte, die aufrecht steht zu sehen sein.

"<0,0,0>" gibt wie bei der Kugel den Mittelpunkt des Objektes an. 0.2 gibt den Radius des optionalen Loches und 1.0 den Radius der Scheibe an. z ist ein interner Vektor. Es gibt außerdem die internen Vektoren x und y. Das kann man sich so vorstellen, als würde die Scheibe mit dem Loch auf eine der Koordinatenachsen gehängt. Um uns das besser vorstellen zu können probieren wir einfach alle einmal aus.

Rotationskörper Bearbeiten

Der Körper wird 2-Dimensional beschrieben und dann um eine Achse rotiert. Syntax:

sor{ "Anzahl der Punkte" ,  
      <x1,y1>,
      <x2,y2>,
      <x3,y3>,
      ...
      <xn,yn,zn>
      (weitere allgemeine Parameter, z.B. Farbe, Texturen...)
      rotate <1,0,0> || rotate <0,1,0> || rotate <0,0,1> (Die 1 gibt an, ob sich der Körper um die x, y oder z-Achse bewegen soll.)
      translate <x,y,z> (Der Körper muss verschoben werden, sofern er nicht im Koordinatenursprung erwünscht ist,
      da er immer im Ursprung gebildet wird.)
 }


Ebene Bearbeiten

 
Ebene nach unten verschoben

Mittels der Ebene läßt sich eine unendlich große Ebene in die Szene legen. Deshalb ist die Syntax etwas anders als bei gewöhnlichen Körpern. Es wird der Normalenvektor, also ein Vektor senkrecht zu einer Ebene angegeben. Im Beispiel ist die Ebene um 3 nach unten verschoben und der Normalvektor ist y.

plane { y, -3.0 }

Himmelskugel Bearbeiten

Mittels sky_sphere läßt sich eine Himmelskugel über der Szene erzeugen und mit einer beliebigen Oberfläche versehen. Die Himmelskugel ist eigentlich eine Kugel vom Radius 1 mit dem Koordinatenursprung als Mittelpunkt, die dann ins Unendliche projiziert wird. Ihr ambient-Wert ist 1, der diffuse-Wert ist 0.

Beim Zusammenstoß zwischen Ebene und Himmelskugel kommt es meist zu häßlichen harten Kanten, so daß man dort ein wenig Nebel verwenden sollte. Mehr dazu im Kapitel über Texturen.

sky_sphere {
  pigment {
    gradient y
    color_map { [0.0 color rgb <0.7,0.7,1.0>] [1.0 color blue 0.5] }
  }
}

Modifikationen von Körpern Bearbeiten

  • Modifikationen des Körpers selbst
    • hollow Der Körper ist hohl, d.h atmosphärische Effekte finden auch im Körper statt.
    • open Damit lassen sich bestimme Objekte mit offenen Enden erzeugen. Zylinder werden so zu Röhren.
  • Modifikationen, die sich auf die Umgebung des Körpers auswirken
    • no_image Zeigt zwar nicht das jeweilige Objekt an, aber dessen Reflexionen.
    • double_illuminate Auch die Schattenseiten der Objekte werden beleuchtet
    • no_reflection Das Objekt wird nicht an anderen reflektiert.
    • no_shadow Das Objekt erzeugt keinen Schatten.