cspiral-plugin for POV-Ray 3.0 (c)Christoph Schuette 1997 christoph.schuette@telelev.net ---------------------------------------------- Achtung! Dies ist nicht die Finale Version von cspiral und der Dokumentation. Bei Fragen oder Verbesserungsvorschlägen einfach eine eMail(s.o.) an mich. ---------------------------------------------- "Into the spiral the cybernautic dream" ---------------------------------------------- Was macht cspiralv.inc ? cspiral ist ein Hilfsprogramm für POV-Ray um Spiralen die in POV-Ray bisher nur als Textur vorhanden sind, im dreidimensionalen Raum zu rendern. Daher habe ich mit der Scriptsprache die POV-Ray 3.0 zur Verfügung stellt, mein erstes "Programm" cspiral erstellt. cspiral renderd SpiralFormen aufgrund von Parametern die innerhalb einer POV-Szenenbeschreibung oder einer Parameterdatei (*.csp) definiert worden sind. In dem Verzeichnis "c_scene" und "demo" befinden sich Beispielszenen, in "csplib" einige Parameterdateien die während der Entwicklung entstanden sind. ---------------------------------------------- Wie installiere ich cspiralv.inc ? POV-Ray benutzt ein Verzeichnis für alle Include Files die "global" verfügbar sein sollen, "include" in dem POV-Ray Verzeichnis. Kopier das File "cspiralv.inc" in diese Verzeichnis und es kann von allen POV-Ray Files aufgerufen werden, egal wo sie sich auf Deinem Computer befinden, oder das INC File sollte in dem Ordner sein wo sich die POV-Datei befindet die das INC File aufruft. ---------------------------------------------- Wie kann ich es benutzen ? Es gibt verschiedene Möglichkeiten ! Die Parameter können sich in einer POV Szenenbeschreibung befinden und durch Aufruf von cspiralv.inc berechnet werden oder sie befinden sich in einer Parameterdatei die durch den include - Befehl in die Szene miteinbezogen werden. Ich entschied mich den Parameterdateien die Endung "csp" (cspiral Parameter) zu geben um diese von den anderen POV Dateien zu unterscheiden. Beispiel einer Parameterdatei: ------------------------------------------- //Dies ist das cspiral-logo ! //spike.csp //Init------------------------- #declare px=0 #declare py=0 //variable--------------------- #declare h=6 #declare i =360 #declare k=20 #declare m=1 #declare hv=0 #declare l=0 #declare lv=1.5/360 #declare com_al=1 #declare sizer=1 #declare sz=0 #declare c_fade_in=0.0025 #declare c_fadeout=0.00125 #declare c_al=5 #declare s_fade_in=10/360//0.0012 #declare s_fadeout=10/360//0.0012 #declare max_size=0.2 #declare min_size=0.01 //----------------------------- #ifndef(test_it) light_source{<-6,10,0> rgb 1} include "cspiralv.inc" camera{ location<0, 9.5,0> look_at < 0,0, 0>} #end ------------------------------------------------ Beispiel einer Szenenbeschreibung die Parameterdateien lädt und dann durch Aufruf von cspiralv.inc die Spiralform berechnet ------------------------------------------------ //Demo.pov //Author: Christoph Schuette //Desc :Renders multiple spiral forms // Into the spiral the cybernautic dream //Environment. Pov-Ray 3.0 #declare test_it=1 //camera and light off in parameter file include "spiral.csp" include "cspiralv.inc" include "armstar.csp" include "cspiralv.inc" include "truespira.csp" include "cspiralv.inc" include "snake.csp" include "cspiralv.inc" light_source{<-6,10,0> rgb 1} camera{ location<0, 9,0> look_at < 0,0, 0>} ---------------------------------------------------------------- Also wenn eine Parameterdatei genutzt wird braucht nur #include "spiral.csp" //die Parameterdatei #include "cspiralv.inc" //berechne die SpiralForm angegeben zu werden um die SpiralForm zu berechnen. ------------------------------------------- Redefinition ?! Eine Redefinition ändert Werte die im Arbeitsspeicher zwischengespeichert sind. Ah, jetzt habe ich diese SpiralForm aber sie könnte noch ein wenig mehr nach ..., oder die SpiralForm soll an einem anderen Platz sein dann schau dir dies an: include "spiral.csp" //Parameterdatei wird geladen //Änderungen einiger Parameter um sie an einen anderen Platz //zu positionieren. #declare px=10 //Neue Position x #declare py=5 //Neue Position z #declare h=4 //Neue Position in der Höhe //Dies kann mit jedem Parameter gemacht werden den cspiral braucht, //nun lassen render it. include "cspiralv.inc" Ich will die SpiralForm rotieren! Ok, dann : #declare spiralform= union{ #include "spiral.csp" #include "cspiralv.inc" } object{spiralform rotate x*45 //translate alter_platz //wenn nötig } Die Parameter ------------------------------------------------------- px und py ist die Position der Spiralform im POV-Raum #declare px=0 #declare py=0 h ist die Höhenposition an der die Spirale beginnt (px,h,py ergeben den Mittelpunkt) #declare h=4 i ist ein Anzahlparameter und kann auch den Winkel darstellen wenn k abhängig von i ist #declare i=90 k der Winkel bezeichnet wie oft i in einem "Voll Kreis" ist wenn com_al=4 zum beispiel i=90 & k=i/360 ergeben vier arme , aber es geht auch so: 4 arme, also 1 durch 4 dividieren, das ist 0.25 und k auf diesen Wert setzen, oder k=1/4. wenn com_al=1 ist sollte k auf 360/i gesetzt werden und eine Spirale entsteht auch wenn com_al=2 ist sollte k=360/i sein um eine spirale ist com_al = 6, sollte k auch 360/i sein dies ergibt einen anderen Effekt siehe "plant_it.pov" This is the most hardest part, so if you get just one "arm" eg one leaf try changing k as mentioned above. Es ist noch nicht integriert das k automatisch einen Wert annimmt um eine spezielle SpiralForm zu rendern, da je nach Kombination der Parameter sehr interessante Objekte entstehen. Dies und die Konstanten werden sich in naher Zukunft ändern. #declare k=i/360 //90/360=0.25 = 4 Spiralarme m Anzahl Wiederholungen #declare m=5 com_al ist eine Konstante um die Position des Objects in der Spirale zu berechnen value 1 : pi/180 2 : pi/180 & 2*pi 3 : (22/7)/180 4 : 2*pi 5 : sin((lv+hv)*cos(pi/180)) 6 : 1 #declare com_al=4 hv ist der Wert für die Höhenänderung wenn die Kamera über dem Objekt ist und hv positiv ist waechst sie nach unten ein negativer Wert lässt sie in Richtung Kamera "wachsen" ist hv=0 ändert sich nichts an der Höhe*/ #declare hv=2/360 //difference of height to previous l ist der Ursprungsradius #declare l=2 lv ist der Wert für die Radiusänderung wenn lv einen negativen Wert hat sollte hv (Höhenänderung) und l (Ursprungsradius) grösser null sein. Eine Möglichkeit Coils(Federn) zu erstellen ist l grösser 0 und lv zu 0, aber hv grösser 0. Also der Radius bleibt gleich, und die Höhe ändert sich #declare lv=-2/360 tv ist ein Wert der dem Winkel hinzuaddiert wird um einen Spiralarm noch mehr zu biegen oder zu beschleunigen. tv sollte proportional zu hv oder lv sein kann aber auch genutzt werden um aus nur einem "Arm" eine Spirale zu formen. #declare tv=lv aw ist eine Winkelangabe (Anfangswinkel), dies kann zum Beispiel zur Animation genutzt werden um die SpiralForm auf der Stelle rotieren zu lassen. #declare aw=clock*(360/Bildanzahl) scale_x und scale_y kann genutzt werden um die spirale zu vergrössern oder zu verkleinern min_radius, max_radius definieren einen Bereich für den Radius wenn lv negativ ist und der Radius nicht kleiner als ein bestimmter Wert werden soll kann dies mit #declare max_radius=0.5 definiert werden. wenn der Radius nicht grösser als ein spezifizierter Wert werden soll #declare min-radius=3 !there is a small bug sizer ist ein Schalter um das Objekt mit dem die Spirale gerendert wird zu verkleinern und zu vergrössern 0 bedeutet "Aus" die Maximal Grösse "maximum_size" des Objekts wird genutzt 1 bedeutet "An" max_size and min_size werden genutzt #declare sizer=1 #declare sz=0 c_fade_in ist ein Wert für den Farbwechsel aufwärts #declare c_fade_in=.5/360 c_fadeout ist ein Wert für den Farbwechsel abwärts #declare c_fadeout=1.5/360 c_al ist ein Wert um eine Farbkombination auszuwählen 0 : wenn c_com genutzt werden soll 1 : Blau zu Orange 2 : Orange zu Blau 3 : Schwarz zu Weiss 4 : eine Ammonit Farbe 5 : eine "giftige" Farbe 6 : etwas Grünes 7 : Blau, Weiss & Schwarz*/ #declare c_al=6 c_com ist eine Zeichenkombination aus "+" und "-" die einen RGB-Code ergibt "+" bedeutet der Wert der für Rot, Grün oder Blau definiert wurde wird zu Schwarz addiert, also bedeutet "-" das der definierte Wert von Weiss subtrahiert wird. Die Zeichenkombination ist immer drei Zeichen lang, wenn damit etwas nicht in Ordnung ist wird ein Warnung ausgegeben und der default ist "+++" Es sind alle (8) Kombinationen möglich. 1 : --- 2 : +-- 3 : -+- 4 : ++- 5 : --+ 6 : +-+ 7 : -++ 8 : +++ r_v definiert den Rot-Anteil, g_v den Grün-Anteil und b_v den Blau-Anteil, ist einer dieser Werte nicht definiert ist sein Grundwert null. Wenn Rot, Grün oder Blau ein konstanter Wert sein soll kann dies mit r_constant, g_constant oder b_constant definiert werden. Der Anteil der Farbe für die dies definiert wurde ändert sich nicht und die anderen werden hinzugemischt. Dies geschieht aber nur wenn der Wert für r_v, g_v oder b_v null ist. Tip: wenn die definierten Farben invertiert werden sollen einfach die "+" zu "-" und "-" zu "+" ändern #declare c_com="+++" #declare r_v=0.1 #declare r_constant=1 #declare g_v=0.5 #declare g_constant=1 #declare b_v=0.1 #declare b_constant=1 c_finish definiert das finish für das Objekt wenn c_finish nicht definiert ist, ist der Grundwert "ambient 0.5" #declare c_finish=finish{ ambient .3 reflection 0.3 crand .5} s_fade_in ist der Wert für Grössenänderung aufwärts #declare s_fade_in=0.15/360//0.012 s_fadeout ist der Wert für Grössenänderung abwärts #declare s_fadeout=0.15/360//0.02 max_size ist der Wert für die maximale Grösse des Objects #declare max_size=0.2 min_size ist der Wert für die minimale Grösse des Objects !wenn dieser Wert null oder negativ ist stürzt POV ab #declare min_size=0.05 user_pigment kann genutzt werden um eine Textur für das Objekt zu definieren c_al wird in diesem Fall nicht genutzt #declare user_pigment= texture{ pigment{ bozo turbulence 1.2 color_map{ [0 rgb<1,1,1>] [0.3 rgb<0,1,0>] [0.2 rgb<1,0,0>] [0.8 rgb<0,1,0>] } } finish {ambient .3 } } user_obj definiert ein Objekt mit dem die SpiralForm gerendert wird ist dies nicht definiert ist eine Kugel das Objekt. #declare user_obj=triangle { < 0, 0, 0>, < 1, 0, 0>, < 1, 0, 2> } rotate_obj_x, rotate_obj_y, rotate_obj_z kann genutzt werden um das Benutzerdefinierte Objekt (user_obj) in der x, y oder z Richtung zu drehen wenn das Objekt in der x Richtung gedreht werden soll #declare rotate_obj_x=1, und wenn auch y rotiert werden soll #declare rotate_obj_y=1, noch eine Chance für z #declare rotate_obj_z=1. Der Wert für die Rotation wird durch rot_val_x, rot_val_y und rot_val_z definiert. #declare rotate_obj_x=1 #declare rot_val_x=18 #declare rotate_obj_y=1 #declare rot_val_y=36 #declare rotate_obj_z=1 #declare rot_val_z=72 //----------------------------- test_it ist ein Schalter um die SpiralForm anzusehen bevor sie in einer POV-Szene integriert werden soll. in dem POV-File sollte dann #declare test_it=0 definiert werden um die Kamera und die Lichter auszuschalten, ist dies nicht definiert benutzt POV die letzte Kameraeinstellung und das Licht ist überall da wo es positioniert wurde! #declare report=0 gibt einige Informationen über die SpiralForm aus. #ifndef(test_it) light_source{<1,10,0> rgb 1} nun wird "cspiralv.inc" gebraucht um die SpiralForm zu rendern include "cspiralv.inc" camera{ location<1, 10,-2> look_at < 0,0, 0>} #end ------------------------------------------------------------------ (w) Christoph Schuette Mai 1997