Home   Studium   Projekte   Linux 
 
 

Computergraphik I

So, ich bin gerade dabei einen Schein in Computergraphik zu machen - als Wirtschaftsinformatiker. :-) Es macht aber Spaß, da wir in Qt und OpenGL programmieren. Auf dieser Seite werden sich nach und nach meine Lösungen zu den einzelnen Aufgaben einfinden.

Voraussetzungen

Die Entwicklung der Programme erfolgt komplett unter Linux. Ich versuche die Makefiles soweit wie möglich UNIX-generisch zu halten und Trolltech's qmake zu benutzen.

Kompilieren

Qt Version 2 oder 3 muß inklusive Header-Files installiert sein, auch qmake (bzw. tmake bei Qt < 3.0) wird benötigt. Ein Programm benutzt das Beispiel-Framework, dies muß dann erst kompiliert und installiert werden. Ein Kompilieren unter anderen UNIX-Derivaten sollte also kein Problem sein (falls doch: Mail!). Falls ihr das unter Windows zum Laufen kriegen wollt, helfen kann ich euch dabei nicht, da ich kein MS Visual C++ besitze (nötig für Qt). Der Quellcode ist allerdings soweit möglich plattformunabhängig.

Mitgeliefertes Binary ausführen

Ein Linux-Binary ist in jedem Archiv vorhanden, so daß nicht neu kompiliert werden muß. Allerdings sind diese Binaries gegen Qt 3 gelinkt, ihr müßt also auf jeden Fall Qt 3 installiert haben. Aufgabe 2 des ersten Aufgabenzettels benötigt auch die libcg1.

Aufgabenzettel 1

Aufgabe 1: Addieren der ASCII-Codes eines Strings. Inklusive Linux- und Windows-Binary.
Aufgabe 2: Erweitern des vorgegebenen Beispielrahmenwerkes. In meinem Fall wird ein Quadrat mit Farbverläufen dargestellt, daß sich um die eigene X- und Y-Achse dreht.
Aufgabe 3: Bonus-Aufgabe, die nicht das Beispiel-Framework benutzen sollte. Mehrere OpenGL-Fenster mit rotierenden Quadraten werden zentral von einem Qt-Fenster inklusive Menü-Leiste und Statuszeile mit verschiedenen Widgets gesteuert. Demonstriert den Signal/Slot-Mechanismus und die Methode, wie die Animation mehrerer Fenster über einen zentralen Taktgeber gesteuert werden kann. Die Benutzung von je einem Taktgeber pro Fenster führt schnell zu Problemen, die sich in unsauberen Animationen äußern.

Aufgabenzettel 2

Aufgabe 1: Es sollte ein Oktaeder dargestellt werden. Meiner rotiert auch noch, damit man überhaupt erkennt daß es sich um einen Oktaeder handelt. Reines OpenGL/GLUT, kein Qt.

Aufgabenzettel 3

Aufgabe 1: Der Oktaeder aus der vorigen Aufgabe sollte dahingehend modifiziert werden, daß er rotiert und sich ständig die Farbe der Eckpunkte ändern. Ich habe das Oktaeder-Programm auf Qt portiert, deshalb ist dies nun C++.

Aufgabenzettel 4

Aufgabe 1: Der Oktaeder soll nun mit Displaylisten gezeichnet werden. Ich habe den gesamten Oktaeder in einer Displayliste gespeichert und zeichne nun zwei nebeneinander. Außerdem habe ich Lighting aktiviert, gibt einen schönen Effekt. Natürlich wieder Qt. GLUT ist für Weicheier. :-)

Aufgabenzettel 5

Aufgabe 1: Nun sollten Translationen, Rotationen und uniforme Skalierungen implementiert werden. Man kann sich nun frei auf der XZ-Ebene der 3D-Welt bewegen. Auch Drehungen um alle Achsen sind möglich. Zum Test zeichne ich 20x20 Oktaeder, um die man sich herumbewegen kann. Auch zeige ich wie man "weiche" Tastatureingaben realisiert. Natürlich wieder Qt.

Aufgabenzettel 6

Aufgabe 1 (Screenshot): Es sollte ein Torus tesseliert werden, oder mit einfachen Worten: ein Doughnut sollte durch Polygone angenähert dargestellt werden. Sämtliche wichtigen Parameter können über die Tastatur verändert werden, auch Rotation und Lighting (inklusive Materialeigenschaften und spekularer Reflexion) ist wieder mit dabei. Und ja, ich habe wieder Qt benutzt.
Bonusaufgabe (Screenshot): Es sollte ein Torus tesseliert werden, oder mit einfachen Worten: ein Doughnut sollte durch Polygone angenähert dargestellt werden. Sämtliche wichtigen Parameter können über die Tastatur verändert werden, auch Rotation und Lighting (inklusive Materialeigenschaften und spekularer Reflexion) ist wieder mit dabei. Und ja, ich habe wieder Qt benutzt.

Aufgabenzettel 7

Aufgabe 1 (Screenshot): Das Torus-Programms sollte um Lighting und die dazu notwendige Normalenberechnung erweitert werden. Lighting inklusive Angabe von Materialeigenschaften war ja schon bei den beiden letzten Lösungen dabei, allerdings hatte ich da noch eine Normale pro Polygon berechnet und diese dann jedem Punkt des Polygons zugeordnet. Nun wird für jeden Punkt getrennt eine Normale berechnet, die sich aus den Normalen der vier umliegenden Polygone ergibt. Das Ergebnis kann sich sehen lassen! Man kann über die Qt-Oberfläche zwischen den beiden Modi wählen und sieht so unmittelbar den Unterschied.
Mail: sj@sjaensch.org
Valid HTML 4.01!Valid CSS!
Last updated: 31 Aug 2008, 23:03:09