Übersicht

Wie funktioniert ein Sphere_Sweep?

Demodatei: Demo1.pov

Sphere_Sweeps sind schlauchartige Objekte, die erzeugt werden, indem man eine gedachte Kugel entlang eines bestimmten Weges bewegt.

Wie weiter unten gezeigt, existieren drei verschiedene Arten, den Weg eines Sphere_Sweeps zu definieren: linear spline, cubic spline oder b spline. Um die Unterschiede zu verdeutlichen wurden in den Beispielen die (jeweils identischen) Punkte für die Wege mit Hilfe gelber Kugeln markiert. Im Gegensatz zum b spline führen linear und cubic splines zu Sphere_Sweeps, die exakt die definierenden Punkte durchlaufen. Des weiteren ist zu beachten, dass beim b spline und beim cubic spline, die äußersten Punkte nicht vom Sphere_Sweep miterfasst werden. Im weiteren Verlauf wird sich dieses Tutorial auf cubic splines beschränken.

Sphere_sweep, linear spline

Sphere_sweep, cubic spline

Sphere_sweep, b spline

In ihrer einfachsten Form werden Sphere_Sweeps in etwa wie folgt definiert. (Hier sehen Sie die Anweisungen für den oben abgebildeten Sphere_Sweep mit cubic spline.)

sphere_sweep {
cubic_spline
7, // Anzahl der definierten Positionen

//Die einzelnen Positionen für den Sphere_Sweep:

<0, 2, 0>, 0.2 // Position, Radius
<2, 3, 0>, 0.2
<4, 1, 0>, 0.2
<6, 2.5, 0>, 0.2
<8, 2, 0>, 0.2
<10, 1, 0>, 0.2
<12, 3, 0>, 0.2
pigment { color rgb <0,0,1> }
}

Die Verwendung von Arrays zur Speicherung der Positionsdaten eines Sphere_Sweeps

Die Positionsdaten eines Sphere_Sweeps werden nicht notwendiger Weise innerhalb dieses Objekts definiert; sie können auch aus einem Array extrahiert werden. Auch wenn dies zunächst unnötig kompliziert erscheint, gibt es einige Vorteile: Vor allen Dingen erhalten die Pov-Ray-Skripte durch die Trennung der Definition der Positionen von der Definition des Sphere_Sweeps eine klarere Struktur. Dadurch wird es einfacher, Positionen zu verwenden, die auf mehr oder weniger komplexe Art und Weise berechnet wurden. Ausserdem können die Positionen des Arrays für die Konstruktion mehrerer, miteinander verbundener Objekte verwendet werden. (Wie zum Beispiel bei den obigen Abbildungen für die Darstellung der Sphere_Sweeps und der sie definierenden Punkte.)
Die Extraktion der Positionen aus einem Array gelingt mit Hilfe einer Schleife innerhalb der Sphere_Sweep-Definition. Ein derartiger Sphere_Sweep, der seine Positionen aus einem Array erhält, wurde nachstehend in Form eines Makros definiert. Es gibt zahlreiche Möglichkeiten, diesen Makro zu verbessern, beispielsweise mit Hilfe von Definitionsmöglichkeiten für einen variablen Radius des Sphere_Sweeps oder für spezielle Texturen. Für diese Demonstration wollte ich den Makro zunächst aber so einfach wie möglich halten.

#macro DrawSphereSweep (ArrayName, Radius, Number)
//Dieser Makro extrahiert die Positionen für einen Sphere_Sweep aus einem Array.
//Der Name des Arrays, der Radius des Sphere_Sweeps und die Zahl der Positionen sind Parameter des Makros.

//Zunächst wird der Sphere_Sweep initialisiert.

sphere_sweep {
cubic_spline
Number,

//Dann wird eine Schleife definiert, die die Positionen aus dem Array extrahiert.

#declare ticker = 0;
#while (ticker < Number)
#declare P1 = ArrayName [ticker];
P1, Radius // Position, Radius
#declare ticker = ticker + 1;
#end

//An dieser Stelle ist der Sphere_Sweep beendet.

pigment { color rgb <0,0,1> }
}
#end

Der Makro wird durch die folgenden Zeile aufgerufen, wobei "Positions" dem Namen des Arrays entspricht, "0.2" dem Radius des Sphere_Sweeps und "Sum" der Anzahl der im Array gespeicherten Positionen.

DrawSphereSweep (Positions, 0.2, Sum)

Nachdem wir nun die Konstruktion des Sphere_Sweeps von der Definition der Positionen getrennt haben, können wir uns auf diese zweite Aufgabe konzentrieren. In den folgenden Kapiteln werde ich Ihnen eine ganze Reihe verschiedener Möglichkeiten vorstellen. Zunächst werden wir den Sphere_Sweep aus einer Wolke zufällig verteilter Positionen erzeugen. Auf diese Weise entstehen mehr oder weniger zufällige Knäuel.

Übersicht