lehrkraefte:blc:math:povray:lektion2

Studieren Sie folgende Abschnitte und probieren Sie die Codeschnipsel aus, indem Sie diese in eine Szene mit Kamera und Licht kopieren (und evtl. ein Koordinatensystem).

Mit 'translate' können Objekte verschoben werden, z.B.

sphere { <0,0,0>,1
  pigment { color rgb x } // rot
  translate <1,2,1> // Kugel hat jetzt neu (1,2,1) als Zentrum
}

Mit 'rotate' können Objekte gedreht werden (rechtsdrehend um die $x$-, $y$- oder $z$-Achse). Winkelangabe in Grad.

Rechtsdrehend heisst, dass wenn der Daumen der rechten Hand in Richtung der Drehachse zeigt, wird das Objekt in Richtung der Finger um die Achse gedreht.

box { <0,0,0>,<1,1,1>  // Einheitswürfel
  pigment { color rgb y } // grün
  rotate 45*z  // Dreht den Würfel nach rechts hinten
}

Mit 'scale' können Objekte gestreckt werden. Entweder wird der Streckfaktor als Zahl, oder ein Vektor mit Streckfaktoren in die 3 Achsenrichtungen angegeben:

sphere { <0,1,0>,1
  pigment { color rgb z } // blau
  scale <1,1,0.2>  // Streckt mit 0.2 in z-Richtung -> kommt flach heraus ;-)
}

Achtung: Es wird immer bezüglich dem Nullpunkt gestreckt. Man sollte die Objekte um den Nullpunkt zentrieren (falls nötig mit 'translate'), dann strecken und am Schluss noch an die richtige Position schieben.

Ein Torus ist eine Art Veloschlauch. Dieser kann durch die Angabe von 2 Radien spezifiziert werden: Distanz von der “Radachse” zur Schlauchmitte und Radius des Schlauchrohres. Siehe http://www.povray.org/documentation/view/3.7.0/288/

Ein so definierter Torus hat sein Zentrum immer im Ursprung und liegt in der $x/z$-Ebene.

torus {1, 0.1
  pigment {color rgb x+y} // gelb
}

Code-Vorlage für Torus (komplette Szene mit Koordinatensystem)

Code-Vorlage für Torus (komplette Szene mit Koordinatensystem)

torus.pov
// Das ist ein Kommentar und bewirkt nichts.
 
// Kamera
camera { 
      sky <0,0,1>          // Vektor, der festlegt, wo oben ist.
      right <-4/3,0,0>     // Bildverhältnis 4:3, plus Spiegelung für rechtsdrehendes System
      location <15,5,8>    // Position der Kamera
      look_at <0, 0, 1>    // Blickrichtung (erscheint im Bildmittelpunkt)
      angle 35             // Öffnungswinkel der Kamera
}
 
// Lichtquellen
light_source { 
 <6,-2,8>              // Position des Lichts
 color rgb <1,1,1>     // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
light_source { 
 <3,10,3>              // Position des Lichts
 color rgb <1,1,1>     // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
 
 
// Boden
plane { 
  z,0        // Ebene, senkrecht zu z=<0,0,1>, mit Abstand 0 zum Ursprung
  pigment {  // Schachbrett, durchsichtig (t steht für transmit, hier 80% lichtdurchlässig
    checker color rgbt <1,1,1,0.8>, color rgbt <0.2,0.2,0.2,0.8>
  }
}
 
 
// x-Achse 
cylinder { <-1,0,0>, <4,0,0>, 0.1  // Zylinder vom Ursprung 0=<0,0,0> zum Punkt 2*<1,0,0>=<2,0,0>, Raddiu 0.1
  pigment { color rgb <1,0,0> }  // Farbe rot
}
 
cone { 4*x, 0.2, 4.4*x, 0  // Kegel von <2,0,0> zu <2.4,0,0>, Startradius 0.2, Endradius 0
  pigment { color rgb x }  // Farble blau z=<0,0,1>
}
 
// y-Achse 
cylinder { -y, 4*y, 0.1  
  pigment { color rgb y } 
}
 
cone { 4*y, 0.2, 4.4*y, 0 
  pigment { color rgb y } 
}
 
// z-Achse 
cylinder { -z, 4*z, 0.1  
  pigment { color rgb z } 
}
 
cone { 4*z, 0.2, 4.4*z, 0  // Kegel von <2,0,0> zu <2.4,0,0>, Startradius 0.2, Endradius 0
  pigment { color rgb z }  // Farble blau z=<0,0,1>
}
 
torus {1, 0.1
  pigment {color rgb x+y} // gelb
}

Verwenden Sie 'rotate' und 'translate', um die Tori an die gewünschte Position zu bringen. Laden Sie ebenfalls ihr Koordinatensytem (mit #include) in ihre Szene.

Erstellen Sie folgende Szenen:

  • Torus, der auf der $x/y$-Ebene liegt (d.h. diese berührt).
  • Einen zweiten, gleich grossen Torus, der in $y$-Richtung verschoben ist und den ersten von aussen berührt.
  • Einen dritten Torus (ebenfalls auf der $x/y$-Ebene), der beide Tori von aussen berührt. Anstatt zu rechnen, vewenden Sie translate und rotate.

Programmieren Sie drei Tori, die ineinander hängen und sich exakt von innen her berühren. Der mittlere Torus ist natürlich um 90 Grad gedreht.

Tip: Mit folgender Anweisung, innerhalb eines Objekts, können Sie dieses spiegelnd machen:

  finish { phong 0.95 reflection {0.95} }

Spiegelnde Objekte leben von ihrer Umgebung. Fügen Sie z.B. einen Himmel hinzu.

Objekte können zu einem Objekt zusammengefasst werden und dann als Ganzes manipuliert werden. Das ist vor allem dann nützlich, wenn man Objekt verschieben, drehen und/oder kopieren möchte:

// Speichern in die Variable schneemann (wird noch nichts angezeigt)
#declare schneemann = union {
  sphere { <0,0,0.5>, 0.5 }
  sphere { <0,0,1.5>, 0.5}
}
 
// Objekt gebrauchen:
object { schneemann
  pigment { color rgb 1 } // Weiss
}
object { schneemann
  pigment { color rgb x } // Rot
  translate <0,2,0>   // Verschieben 
}

Folgender Code erzeugt einen halben Torus:

#declare rund = difference { // Halber torus (in x/z-Ebene, Teil mit positiver x-Koordinate
  torus {1, 0.2}
  plane {x, 0}
}  
object{rund
  pigment{color rgb x}
}

Bauen Sie daraus ein Kettenglied (mit zwei halben Tori und zwei Zylindern). Definieren Sie dann eine neue Variable (z.B. kettenglied) und stellen Sie dann wieder eine Kette dar.

Mit Hilfe von Wiederholungen, stellen Sie folgendes dar:

  • eine Kette mit vielen Gliedern
  • eine Kette die im Kreis geschlossen ist
  • ein Kettenhemd, mit runden gliedern (bzw. zwei-dimensionale Kette)
  • Hängende Kette entlang einer Parabel

  • lehrkraefte/blc/math/povray/lektion2.txt
  • Last modified: 2017/05/05 09:33
  • by Ivo Blöchliger