@sh:So funktioniert der Raytracer º4Persistence of Visionº4
@vs:Raytracing -- Strahlverfolgung -- ist eine Methode zur plastischen Darstellung von 3D-Objekten, die hohe Anforderungen an die Rechenleistung von Computern stellt. Durch die rasante Entwicklung der Hardware wird diese Methode auch fⁿr den normalen PC-Anwender interessant.
@itx:Ein Raytracer berechnet fⁿr eine vorgegebene Szene, die aus verschiedenen Objekten und Lichtquellen bestehen kann, wie die einzelnen Objekte auf das Auge (Kamera) des Betrachters wirken. Die Faszination dieser Technik und der produzierten Bilder hat auch einige Programmautoren aus dem nicht kommerziellen Bereich dazu bewegt, solche Programme zu entwerfen. Der DKB-Raytracer, benannt nach seinem Autor David. K. Buck, ist ein solches Programm, dessen Umfang inzwischen jedoch so angestiegen ist, da▀ sich mit der Weiterentwicklung ein ganzes Autorenteam beschΣftigt. Das Programm wird in der PD-Szene unter der Bezeichnung º4Persistence of Visionº4, kurz POVRAY, angeboten und liegt zur Zeit in der Version 2.1 vor.
@tx:POVRAY hat keinen integrierten Scenery-Editor. Die Beschreibung der Szene erfolgt vielmehr in Klartext mit einer von den Autoren entworfenen Syntax. In diesem Artikel wird die Syntax in den Grundlagen beschrieben und gezeigt, wie man schon mit einigen wenigen Zeilen eigene Phantasiewelten entwerfen kann.
@zⁿ:So funktioniert Raytracing
@tx:Um die Ausleuchtung einer Szene mit Lichtquellen und Objekten zu berechnen, sind theoretisch unendlich viele Lichtstrahlen zu analysieren. Will man die Szene auf einem Bildschirm oder einem anderen AusgabegerΣt darstellen, sind jedoch nur solche Strahlen interessant, die durch ein Fenster (Bildschirm) auf das Auge des Beobachters treffen. Jeder Bildschirm besitzt eine begrenzte Anzahl von Pixeln und soviele Strahlen sind dann auch nur zu berechnen. Es wird aber nicht, wie der Name Raytracing vermuten lΣ▀t, der Lichtstrahl von der Lichtquelle bis zum Auge verfolgt, sondern zur Berechnung der Farbe eines Pixels wird umkehrt vorgegangen: Man zieht eine Gerade von der Kamera zu dem Pixel und analysiert das weitere Schicksal dieses Strahles. Geht er ins Leere (Hintergrund) oder trifft er auf ein Objekt? Wenn ja mit welchem Winkel trifft er auf? Wie ist das Objekt beleuchtet, welche Eigenschaften hat die OberflΣche des Objekts und so weiter. Wird der Strahl von dem Objekt reflektiert, so mu▀ er weiter verfolgt werden (<I>Bild 1<P>). Trifft der Strahl auf durchsichtiges Material, so geht ein Teil des Lichts, den Brechungsgesetzen folgend, durch das Objekt hindurch, ein anderer Teil wird je nach OberflΣche reflektiert. Im weiteren sind dann zwei Strahlen zu verfolgen, die unter UmstΣnden wieder aufgesplittet werden k÷nnen. Am Ende wird die Farbe des Pixels aus dem Schicksal aller Teilstrahlen berechnet. Was im Grunde einfach klingt, ist in Wirklichkeit eine recht komplexe Angelegenheit, die in ein Programm umzusetzen sicher keine einfache Aufgabe ist und auch nicht Gegenstand dieses Artikels sein soll. Wer sich mehr fⁿr programmiertechnische Details interessiert, dem sei ein einfⁿhrender Artikel[1] oder das Standardwerk des Raytracings von Andrew Glassner[2] empfohlen. Dort werden auch Algorithmen zur Programmierung von Raytracern in C vorgestellt.
@zⁿ:Arbeiten mit dem POV
@tx:Die Bedienung des POV-Raytracers ist sicher nichts fⁿr Windows-verw÷hnte Benutzer. Alle Optionen mⁿssen spartanisch ⁿber DOS-Ebene als Parameter-String eingegeben werden. Das hat jedoch den Vorteil, da▀ man ⁿber eine Stapeldatei eine ganze Serie in einem Nachtlauf berechnen kann. Denn auch bei hoher Rechenleistung lohnt das Warten vor dem Bildschirm nur bei der Berechnung von sehr einfachen Bildern.
Die Aufl÷sung des zu berechnenden Bildes ist nicht durch die Hardware des Rechners limitiert, beeinflu▀t aber sehr wohl die Rechendauer. Das Bild wird grundsΣtzlich in 24-Bit True-Color berechnet und als nicht komprimiertes Targa-Bild gespeichert. Die gewⁿnschte Aufl÷sung wird dem Programm ⁿber die Parameter º4wº4 und º4hº4 mitgeteilt. WΣhlt man Aufl÷sungen, die auch auf einer Standard- oder SVGA-Karte darstellbar sind, so kann man dem Raytracer bei der Arbeit zusehen. Die AusgabequalitΣt ist vorerst jedoch recht schwach; eine Nachbearbeitung, die auf den vollen Informationsschatz der TGA-Datei zugreift, sollte auf jeden Fall erfolgen. Weitere Parameter beeinflussen die BildqualitΣt und damit die Rechenzeit. Auch ein adaptives Antialiasing kann eingestellt werden, was bei geringen Aufl÷sungen eine merkliche GlΣttung von SΣgezahnstrukturen bewirkt. ▄ber eine Reihe weiterer Optionen wird der Programmablauf gesteuert. Sie sind alle ausfⁿhrlich in der mitgelieferten englischen Dokumentation beschrieben. Der Aufruf des Tracers mit
bedeutet: Berechne das Bild, das in der Script-Datei PACMAN.POV abgelegt ist und erzeuge eine Ausgabedatei namens PACMAN.TGA mit der Aufl÷sung 320x200 Pixel (-w320 -h200). Zeige wΣhrend der Berechnung keine Zeilennummern an (-v), dafⁿr jedoch das Bild auf dem Monitor (+d). Die Ausgabedatei soll im TGA-Format geschrieben werden (+ft). Nach der Berechnung soll das Bild bis zu einem Tastendruck auf dem Schirm bleiben (+p). Das Programm kann jederzeit durch einen Tastendruck abgebrochen werden (+x). Antialiasing soll mit der Voreinstellung 0.3 durchgefⁿhrt werden (+a).
Als einfache Objekte kennt der POV-Raytracer eine Reihe von vordefinierten geometrischen K÷rpern, deren OberflΣchen mathematisch exakt beschrieben werden k÷nnen. Mit Hilfe einer Skriptdatei kann dabei neben der Form auch das Σu▀ere Ercheinungsbild exakt vorgegeben werden. Im folgenden soll dieses Vorgehen kurz beschrieben werden.
@zⁿ:Objekte
@tx:Fⁿr den Benutzer von Raytracing-Programmen stellt sich die Frage, wie er die Szene, die er dargestellt haben m÷chte, dem Programm mitteilt. Der POV-Raytracer arbeitet mit einem kartesischen Koordinatensystem, in dem die einzelnen Objekte positioniert werden k÷nnen. In <I>Bild 2<P> wurde eine wei▀e Kugel an der Position (3.5, 3.3, 1.5) erzeugt. Um die Koordinatenachsen sichtbar zu machen, wurde um die 3 Achsen jeweils ein Zylinder gelegt. Das Bild wurde mit der in Listing 1 aufgefⁿhrten Script-Datei produziert. Die Namen der Script-Dateien, deren Syntax etwas an strukturierte Programmiersprachen erinnern, werden an den Raytracer in der Parameterzeile ⁿbergeben. Wie die Anweisung º4Positioniere eine rote Kugel mit dem Radius 1.35 an dem Punkt P(3/6/2)º4 dem Tracer mitgeteilt wird, ist aus Beispiel 1 ersichtlich.
@li:object {
sphere { <3, 6, 2>, 1.35
pigment { color Red }
}
}
@tx:Neben der Kugel gibt es noch Ebenen (PLANE) und Dreiecke (TRIANGLE) als einfache vordefinierte K÷rper. ZusΣtzlich definieren Sie sich selbst weitere komplexe geometrische K÷rper. Da dies nicht ganz einfach ist, werden mit der Datei SHAPES.INC vordefinierte K÷rper wie Konus, Ellipsoid, Zylinder, Paraboloid (QUADRICs) oder Torus (QUARTICs) zur Verfⁿgung gestellt. Ein Zylinder auf der x-Achse ist so definiert:
@li:#declare Cylinder_X =
quadric
{<0, 1, 1>,
<0, 0, 0>,
<0, 0, 0>, -1
}
@tx:Dieser K÷rper wird dann im weiteren mit der Anweisung
@li:object {
Cylinder_X {......
...
}
}
@tx:aufgerufen. Die Zahlen hinter dem Schlⁿsselwort QUADRIC stellen die Koeffizienten eines Polynoms 2.Ordnung dar, das die OberflΣche des Objektes beschreibt. Die Objekte werden immer im Ursprung definiert und mⁿssen dann mit Hilfe der SCALE-Anweisung in die richtige Gr÷▀e und Form, danach durch entsprechende Transformationsbefehle (TRANSLATE = Verschieben, ROTATE = Drehen) in die gewⁿnschte Position gerⁿckt werden. Noch komplexere Objekte, die aus mehreren einfachen Objekten zusammengesetzt sind, befinden sich vordefiniert in der Datei SHAPES2.INC. Hier ist beispielsweise ein Tetraeder zu finden, der aus vier Ebenen mit Hilfe des CSG-Verfahrens, das weiter unten erlΣutert wird, zusammengesetzt wurde:
@li:#declare Tetrahedron =
intersection
{plane {-y,1}
plane {-z,1 rotate <19.47, 0, 0>}
plane {-z,1 rotate <19.47, -120, 0>}
plane {-z,1 rotate <19.47, 120, 0>}
}
@tx:
@zⁿ:Texturen
@tx:Eine weitere Datei, die in jede POV-Scriptdatei mit Hilfe eines Include-Befehls eingebunden wird, ist TEXTURES.INC. Unter º4Texturenº4 (Bemusterungen) versteht man die OberflΣcheneigenschaften eines K÷rpers. Zum einen kann man einem Objekt verschiedene Materialien wie Marmor, Holz oder Metall zuordnen, aber auch Farben, Farbmuster, Brechungsindex oder Rauheit der OberflΣche lassen sich definieren. Dies sind nur einige Beispiele. Die verschiedenen Texturen lassen sich auch untereinander kombinieren. Zudem projezieren Sie angefertigte Bilddateien im TGA-, IFF- oder GIF-Format per IMAGEMAP-Befehl auf OberflΣchen von Objekten.
Der POV unterscheidet drei Formen der OberflΣchengestaltung, die in dem Textur-Block aufgefⁿhrt sein k÷nnen: PIGMENT beschreibt die Eigenfarbe, NORMAL die OberflΣchenstruktur und FINISH die Materialeigenschaften wie Glanz, Brechung, Spiegelung eines Objektes.
@zⁿ:Farben
@tx:Die Eigenfarbe (PIGMENT) eines K÷rpers wird ⁿber maximal vier Parameter mit gⁿltigen Werten von 0.0 bis 1.0 definiert. Es wird das RGB-Modell verwendet:
@li:pigment {
color red 0.5 green 0.5 blue 0.5
filter 0.2 }
@tx:bedeutet einen mittleren Grauton. Der FILTER-Wert bestimmt die Durchsichtigkeit des Objekts: 0.0 bedeutet º4undurchsichtigº4 (Voreinstellung), 1.0 º4total durchscheinendº4. In der Datei COLORS.INC sind schon eine Vielzahl von Farben vordefiniert.
Die Definition der Farben, zum Beispiel º4Redº4, erspart Schreibarbeit und f÷rdert die Lesbarkeit des Scripts. Neben den einfachen EinfΣrbungen eines Objektes sind noch eine Vielzahl weiterer Pigmentierungen wie Schachbrettmuster, Marmorierungen und FarbverlΣufe erzeugbar, die zu Dutzenden bereits vordefiniert vorliegen. So k÷nnen Materialien wie Holz, Granit, Marmor oder Glas durch entsprechende Auswahl der Pigment-Textur imitiert werden.
@zⁿ:OberflΣchliches
@tx:Die Definition der OberflΣchenstruktur wird innerhalb des Texturblocks mit dem Befehl NORMAL eingeleitet. Er bewirkt eine 3D-Strukturierung der OberflΣche. Wellen-, Zackenmuster oder auch ⁿber IMAGEMAP vordefinierte 3D-Strukturen k÷nnen zugeordnet werden.
Schlie▀lich mⁿssen dem Tracer noch die OberflΣcheneigenschaften des Objektes mitgeteilt werden. Zum Beispiel: wie stark ist eine OberflΣche poliert, wird das Licht gebrochen und/oder reflektiert und andere. Hier ist eine genaue Abstimmung mit der Pigmenttextur erforderlich, um dem Gegenstand schlie▀lich das gewⁿnschte Aussehen zu verleihen.
Die Definition eines POV-Objekts erfolgt also in vier Schritten:
1. Geometrische Definition des Objekts
2. Pigmenttextur
3. OberflΣchenstruktur
4. OberflΣcheneigenschaften
GrundsΣtzlich arbeitet der POV-Raytracer mit intern voreingestellten Texturen, die durch die eigenen Angaben ⁿberschrieben werden. Es ist also nicht in jedem Falle erforderlich, alle Eigenschaften bis ins Detail zu beschreiben. Fⁿr den Einstieg genⁿgt oft die alleinige Angabe eines PIGMENT-Wertes (Default-Wert ist schwarz). Die Klammerung durch TEXTURE {...} kann dann auch entfallen.
Zur VervollstΣndigung eines POV-Scripts geh÷rt noch in jede Datei die Definition des Beobachtungspunktes (CAMERA). Hier mu▀ neben dem Standort (LOCATION) mindestens noch die Blickrichtung ⁿber LOOK_AT mitgeteilt werden. Auch sollte wenigstens eine Lichtquelle, im einfachsten Fall eine Punktlichtquelle, als Objekt LIGHT_SOURCE definiert werden. Varianten dazu sind Punktlichtquellen mit Lichtkegel, die einen Spotlighteffekt erzeugen oder auch flΣchenf÷rmige Lichtquellen. Damit lassen sich die fⁿr Raytracinggrafiken oft charakteristischen scharfen ▄bergΣnge von Licht und Schatten in sanftere ▄bergΣnge ⁿberfⁿhren.
Mit den bisher vorgestellten einfachen Objekten lassen sich nur relativ einfache Bilder erzeugen. Die nΣchste Stufe im Bildentwurf ist die Kombination der Primitiven zu komplexeren Gebilden. Eine universell einsetzbare, einfache Methode scheint dafⁿr offensichtlich noch nicht zu existieren. POV bietet daher verschiedene Werkzeuge zur Modellierung komplexer aufgebauter Objekte an. Zwei davon sollen nΣher vorgestellt werden.
@zⁿ:Raytracer-Baukasten
@tx:Eine Eigenschaft aller POV-Objekte (au▀er den Dreiecken und davon abgeleiteten K÷rper) ist, da▀ sie aufgrund ihrer Definition eine Au▀en- und Innenseite besitzen. Auch Ebenen sind keine unendlich dⁿnnen FlΣchen, sondern man mu▀ sie sich als HalbrΣume mit Innen- und Au▀enseite vorstellen. Diese Eigenschaft kann dazu genutzt werden, neue komplexer aufgebaute K÷rper durch Kombination einfacher Objekte in einer Art º4Baukastensystemº4 zu konstruieren. Dieses Verfahren, Constructive Solid Geometry (CSG) genannt, ist im POV implementiert und wird kurz beschrieben. Als Beispiel werden verschiedene Verknⁿpfungen einer Kugel mit einem Wⁿrfel durchgefⁿhrt.
Die einfachste Kombination zweier Objekte ist ihre Addition (logische ODER-Verknⁿpfung). Anhand einer Kugel und eines Wⁿrfels wird dies in <I>Bild 3<P> (rechts) demonstriert. Die Oder-Verknⁿpfung erfolgt durch das Schlⁿsselwort UNION. Die beiden einzelnen Objekte verschmelzen dadurch zu einem. Links daneben ist das Gegenstⁿck der UNION-Verknⁿpfung, die Differenzbildung der beiden K÷rper, dargestellt. Hier wird der Wⁿrfel von der Kugel subtrahiert. Dies wird mit Hilfe von DIFFERENCE vorgenommen (Listing 2). Der zweite K÷rper wird vom ersten º4subtrahiertº4. Eine weitere Differenzbildung, in <I>Bild 4<P> links dargestellt ist machbar, wenn man die Kugel von dem Wⁿrfel subtrahiert. Dies wird durch Umstellen der Reihenfolge Wⁿrfel/Kugel erreicht. In Bild 4 rechts ist noch die letzte Verknⁿpfung, die logische UND-Verknⁿpfung der beiden Objekte mit Hilfe des INTERSECTION-Befehles, dargestellt (Listing 3).
Durch CSG verknⁿpfte Objekte k÷nnen selbst CSG-Objekte sein, eine Verschachtelung ist also erlaubt. Oft werden CSG-Objekte in DECLARE-Anweisungen, die dann per INCLUDE eingebunden werden, verwendet. Die Verwendung derart vordefinierter Strukturen f÷rdert die Entwicklung und die Lesbarkeit von POV-Scripts ungemein.
Wie leistungsfΣhig CSG sein kann, sei an dem Beispiel des bekannten gefrΣ▀igen Gesellen in <I>Bild 5<P> demonstriert, dessen Script-Datei neben vielen weiteren Beispielen dem Programmpaket beigefⁿgt ist. Sie ist auch gleichzeitig ein Beispiel dafⁿr, wie man auf einfache Weise ⁿber eine externe IFF-Datei eine Textur auf einer FlΣche anbringen kann: Der Irrgarten wurde einfach per º4IMAGEMAP maze.iffº4 auf dem Boden angebracht.
@zⁿ:Modellierung
@tx:Alle bisher erwΣhnten Objekte haben fⁿr den Einsatz in einem Raytracer einen entscheidenden Vorteil: Ihre OberflΣchen lassen sich mathematisch exakt beschreiben. Wie soll man aber K÷rper beschreiben, deren exakte Gleichung man nicht kennt oder die zu komplex sind? Die L÷sung hei▀t Approximation mit Dreiecken. ─hnlich wie bei CSG fⁿr Objekte mit Innen- und Au▀enseite bietet der POV-Tracer fⁿr beliebig geformte FlΣchen ein Verfahren, diese aus vielen kleinen Dreiecken (TRIANGLE) oder besser noch aus entsprechend gekrⁿmmten Dreiecken (SMOOTH TRIANGLE) zusammenzusetzen. Dies ist jedoch sehr mⁿhsam, da man in den seltensten FΣllen die Koordinaten und bei SMOOTH TRIANGLEs auch noch die OberflΣchen-Normale der Dreiecke kennt. Einen Ausweg bietet sich hier in der Definition eines º4Bicubic patchº4. Hier sind nur 16 Stⁿtzpunkte zu definieren. Der Raytracer berechnet daraus selbstΣndig durch Bezier-Interpolation eine einstellbare Anzahl von Dreiecken, die dann die FlΣche ⁿberziehen, die durch die Stⁿtzpunkte angedeutet wurde.
Noch einfacher lΣ▀t sich eine FlΣche mit Hilfe eines Heightfields definieren: Die GrundflΣche dieses Feldes liegt zunΣchst in der xz-Ebene und bildet ein Quadrat, das durch die Punkte (0,0,0) und (1,0,1) aufgespannt wird. ▄ber dieser GrundfΣche wird mit y-Werten von 0 bis 1 die OberflΣche definiert. Das ganze Gebilde pa▀t also in einen Wⁿrfel der KantenlΣnge 1. Der Trick besteht nun in der Bereitstellung der y-Daten: Die Werte werden aus TGA- oder GIF-Files, also Bild-Dateien, ⁿbernommen. Die Syntax lautet beispielsweise:
@li:height_field { gif º4fractal.gifº4 }
@tx:Die GIF-Datei FRACTAL.GIF wird dadurch zunΣchst so skaliert, da▀ das Bild in die 1x1-GrundflΣche des Feldes pa▀t. Die Farben des Bildes (genauer gesagt die Nummern der PaletteneintrΣge) werden zur Definition der jeweiligen y-Koordinate herangezogen. Der Raytracer erzeugt dann, allerdings erst wΣhrend der Laufzeit, pro Punkt zwei Dreiecke. Die resultierende FlΣche gibt damit die FarbverlΣufe des Ursprungbildes wider. Bei GIF-Dateien sind 256 verschiedene PaletteneintrΣge definiert, man erhΣlt daher eine Aufl÷sung in y-Richtung von 256 Einheiten. Beim TGA-Format handelt es sich um ein True-Color-Format, es werden also direkt die Farben und keine PaletteneintrΣge abgelegt. Verwendet man dieses Format, so wird die y-Koordinate aus dem Rotgrⁿn-Anteil der Farbe berechnet. Daraus resultiert eine Aufl÷sung von 32768 Bildpunkten. Das Heightfield, das zunΣchst eine GrundflΣche von 1x1 und eine maximale H÷he von 1 besitzt, kann nun durch entsprechende Transformationsbefehle beliebig vergr÷▀ert, gedreht und verschoben werden. In Listing 4 wird die Verwendung eines Heightfields demonstriert. Fⁿr die Modellierung der FlΣche wurde eine TGA-Datei herangezogen, die mit dem kurzen Pascal-Programm WAVES.PAS aus Listing 5 erzeugt wurde. Das Programm produziert ein Bild, in dem die Rot- und Grⁿn-Werte durch Sinus-Funktionen in x- und y-Richtung berechnet werden. Das h÷herwertige Byte wird als Rot- das niederwertige Byte als Grⁿn-Anteil abgelegt. Die Phasenverschiebung, Frequenz und Amplitude k÷nnen ⁿber Parameter eingestellt werden. Die TGA-Datei ist auf <I>Bild 6<P>, das mit dem POV erzeugte auf <I>Bild 7<P> zu betrachten. Das Wellental wurde noch mit einer polierten Sandelholz-Textur versehen, der Untergrund mit einem Kork-Muster. Das Pascal-Programm ist hier recht kurz gehalten, der Experimentierfreude sind jedoch keine Grenzen gesetzt. Auch Versuche mit Fractal-Dateien als oberflΣchenformende Dateien ergeben sicher interessante Gebilde.
@zⁿ:Bildbearbeitung
@tx:Durch die zahlreich mitgelieferten Demodateien bekommt man schnell einen Eindruck davon, wie der POV zum Arbeiten gebracht werden kann. Gegenⁿber frⁿheren Versionen wurden einige Ungereimtheiten in der Befehlssyntax glattgebⁿgelt. Das ⁿber 100 Seiten starke Handbuch wurde ebenfalls ⁿberarbeitet und bietet neben der kompletten Beschreibung der Syntax noch ein kleines Tutorial fⁿr den schnellen Einstieg.
Ein kleines Problem stellt sich noch fⁿr Besitzer von º4nurº4-(S)VGA-Karten. Nach der Berechnung einer Szene steht das fertige Bild zunΣchst im unkomprimierten TARGA-Format zur Verfⁿgung. Fⁿr jedes Pixel wird der RGB-Wert in 3 Byte, je eines fⁿr Blau-, Grⁿn- und Rot-Anteil gespeichert. Am Anfang des Files steht noch ein 18 Byte langer Header. Wer nun in der glⁿcklichen Lage ist, stolzer Besitzer einer True-Color-Karte zu sein, kann sich dann, einen entsprechenden Viewer vorausgesetzt, das Ergebnis in seiner vollen Farbenpracht (16,8 Mio. darstellbare Farben) ansehen. Neuere VESA-VGA-Karten mit einer Aufl÷sung bis 640x480 in True-Color und daneben zahlreiche Insell÷sungen der einzelnen Grafikkartenhersteller werden von POV direkt unterstⁿtzt. Ist die eigene Grafikkarte nicht darunter, ist die zusΣtzliche Anschaffung eines Grafik-Viewers mit Farbreduktion [4] dringend anzuraten. Ein dazu geeignetes Produkt ist beispielsweise das Shareware-Programm º4Image Alchemyº4, mit dem man problemlos TARGA-Dateien in palettenorientierte Formate wie PCX, GIF oder BMP konvertieren kann. Um die True-Color-Datei BILD03.TGA in eine 256-Farben PCX-Datei zu konvertieren, ist Alchemy wie folgt aufzurufen:
alchemy bild03.tga -p -8 -c256 -d0
Diese Befehlszeile weist Alchemy an, aus der TGA-Datei eine PCX-Datei (-p) mit 8 Bit Farbtiefe (-8) und 256 Farben (-c256) ohne Dithering (-d0) zu erzeugen. Betrachten lΣ▀t sich die PCX-Datei dann mit
alchemy bild03.pcx -v640.
SelbstverstΣndlich k÷nnen auch Programme mit einfacher interaktiver BenutzeroberflΣche wie Graphic Workshop, das deutsche Sharewarprogramm PV oder Piclab fⁿr diesen Zweck eingesetzt werden. Die Eingabe der erforderlichen Aktionen ⁿber die Parameterzeile wirkt zwar in Zeiten von graphischen BenutzeroberflΣchen antiquiert, hat aber den nicht zu unterschΣtzenden Vorteil, da▀ solche Zeilen leicht in Batchdateien eingebunden werden k÷nnen und so in einem Nachtlauf eine ganze Serie von Bilddateien gerendert und in das gewⁿnschte Format konvertiert werden k÷nnen. Bei Speicherplatzmangel k÷nnen die temporΣr erzeugten, volumin÷sen TGA-Dateien dann entweder jeweils gel÷scht oder auch komprimiert gespeichert werden.
<I>Dr. Rudolf Ehrler/bm<P>
@lhe:Literatur
@ltx:[1] D. Weineck DOS International 9/90, S. 44
[2] Andrew S. Glassner, An Introduction to Ray Tracing, Academic Press 1989
[3] Compuserve: GO GRAPHDEV, Section 8 und 9, oder entprechende PD-Quellen
[4] D. Bⁿckart mc 12/91 S. 92.
@bu:Listing 1. LIST01.POV plaziert eine Kugel im Koordinatensystem
Listing 2. LIST02.POV verknⁿpft Kugel und Wⁿrfel durch CSG
Listing 3. LIST03.POV zeigt weitere CSG-Vernⁿpfungen wie in Bild 4
Listing 4. LIST04.POV definiert poliertes Sandelholz auf Korkboden (Bild 7).
Listing 5.WAVES.PAS erzeugt die TGA-Datei fⁿr Bild 7.
Bild 1. Fⁿr jedes Pixel mu▀ ein Strahl berechnet weden
Bild 2. Einfache Elemente (Primitive): Kugel und Zylinder
Bild 3. Verknⁿpfung von Kugel(A) und Wⁿrfel(B): A-B (links), A ODER B (rechts)
Bild 4. Weitere Verknⁿpfungen: B-A (links), A UND B (rechts).
Bild 5. Pacman bei der Arbeit
Bild 6. Dieses Bild ergibt das Heightfield in Bild 7
Bild 7. Sandelholzgebirge auf Korkboden: Heightfield-Demo