|
|
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.
|
|