Lösungen
Hier die Lösungen zu den Aufgaben. Zu einigen Lösungen gibt es Screenshots, für eine größere Version einfach auf das kleine Bild klicken.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 4: 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 5: Der Oktaeder aus der vorigen Aufgabe sollte dahingehend modifiziert werden, dass 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 6: 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 8: 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 10: 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 11: Wie Aufgabe 10, allerdings gibt es diesmal zusätzlich ein Kontrollfenster, wo alle Parameter bequem eingegeben werden können. Dies beinhaltet die beiden Radien, Rotationsparameter und die Anzahl Ringe sowie Punkte pro Ring, die zum Tesselieren verwendet werden.
Aufgabenzettel 7
Aufgabe 12: 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.
