DK logo

Andere Projekte

RaytracerLarge
C++-Raytracer

Im Rahmen einer der praktischen Aufgaben aus der Lehrveranstaltung "Graphische Datenverarbeitung I" an der TUD hatten wir (ich und zwei Kommilitonen) die Aufgabe, einen einfachen rekursiven Raytracer*) zu programmieren. Nachdem wir bereits damals etwas über das Ziel hinausgeschossen sind, und eine recht große Anzahl an Primitiven und Features realisiert hatten, habe ich im Nachhinein noch weitere Funktionen wie z.B. das Laden der Szene aus einer Szenenbeschreibungsdatei oder eine einfache Rendervorschau hinzugefügt, wozu ich den Raytracer-Code mit dem Open-Source Window Toolkit wxWidgets verbunden habe. Derzeit kann er neben Primitiven wie Kugeln usw. allerdings nur *.off-3D-Meshes rendern.
Am Ende hatte der Quellcode ca. 6000 Zeilen (6900, wenn man die primitive GUI mit dazunimmt).

Eine Szenenbeschreibungsdatei sieht z.B. so aus, links und weiter unten sieht man ein paar Renderings dieser Szene und Abwandlungen davon.

Erstes getestetes Setup, die weißen Kreuze markieren die Positionen der Lichter (die schwarzen Kreuze deren Projektion auf die xz-Ebene):

Raytracer800-1

Tests der for-Anweisung zur Generierung von Arrays von Objekten:

Raytracer800-2

Raytracer800-3

Die Szene gerendert mit einfachem 2x2-Sampling-Antialiasing:

Raytracer1024-1

Das berühmte Stanford-Bunny als Test eines Meshes mit vielen Polygonen (zur Beschleunigung des Rendervorgangs haben wir einen Octtree benutzt):

Raytracer1024-2

Das Bunny in Orange:

Raytracer1024-3

*) So lautete die dritte von insgesamt ca. 5 Übungsaufgaben. In der vierten "durften" wir dann Monte Carlo Raytracing implementieren, was auch funktioniert hat. Ich jedoch habe im Folgenden diesen Ansatz nicht weiter verfolgt, da die Renderzeiten auf einzelnen Computern bekanntlich schon für einfache Szenen gigantisch werden.
USSPegasus-TechDocs
PegasusDecks
Die USS Pegasus

Dies ist das allererste Mal, dass ich dieses Projekt online präsentiere. Die USS Pegasus, ein Raumschiff der Yverdon-Klasse, das gewisse Ähnlichkeit mit der alten Enterprise NCC-1701-A aufweist, ist letztendlich entstanden aus einer von mir als Kind geschriebenen Geschichte - sowie einem kaputten Modell der Enterprise NCC-1701-A ;), bei dem die Antriebe abgebrochen waren. Da ich es nicht übers Herz gebracht habe, das Modell wegzuschmeißen, habe ich die Antriebe einfach falsch herum angeklebt und das Schiff in "USS Pegasus" umbenannt.

Irgendwann (wahrscheinlich ca. 10 Jahre) später wollte ich, inspiriert von den Blueprints für die USS Enterprise NCC-1701-D, dem Technical Manual derselben sowie diversen anderen Technikbüchern aus der Star Trek Welt (das "Deep Space Nine Technical Manual" ist auch richtig cool, v.a. farbig) auch selbst einmal ein Star Trek Raumschiff bis zum letzten Detail entwickeln. Aus einem Grund, an den ich mich nicht mehr genau erinnere, habe ich dafür dann die USS Pegasus ausgewählt. Im Folgenden Deckpläne, 3D-Modell und einige Zeichnungen dazu. Außerdem verlinkt ist hier eine frühe, grobe Version des Technical Drafts zur Yverdon-Klasse, an der ich mal eine Weile gearbeitet habe.

Diese Datei stellt das Ergebnis des Vektorisierungsalgorithmus von Inkscape dar. Angewandt habe ich ihn auf die allererste Version, die ich jemals von der USS Pegasus auf dem PC gezeichnet habe, und ich muss sagen, dass ich sehr überrascht über die Qualität des Ergebnisses war (dafür, dass die Eingabedaten eine extrem schlechte Auflösung hatten):

PegasusVectorizedBitmap

Eine Seitenansicht der USS Pegasus auf Papier (insgesamt 5 DINA4-Blätter, Bleistift, Colorierung mit Buntstiften):

USSPegasusNCC-1981-port

Das erste USS Pegasus 3D-Modell, damals mit der eigenartigen Software Corel Dream 3D modelliert. Der Import in 3D Studio Max hat eigentlich nie besonders schön geklappt, daher habe ich später dann ein komplett neues Modell in 3DSMax erstellt. Diese alte Version hat außerdem noch Landestützen (wie die USS Voyager), die Option, auf Planeten landen zu können, ist dann aber im weiteren Designprozess des Schiffes entfallen:

PegasusFirstModelBackSide PegasusFirstModelBottom

Das 3DSMax-Modell, leider nach wie vor nicht sonderlich detailliert, da ich es in erster Linie für die Deckpläne benötigt habe:

PegasusCurrentBack PegasusCurrentTop

Ein paar Zeichnungen:

PegasusTechnical1 PegasusTechnical2 PegasusTechnical3

Animation, Iteration über die Decks:

PegasusDeckAnimation

Die Deckpläne:

USSPegasus1 USSPegasus2 USSPegasus3 USSPegasus4 USSPegasus5