¨Ubungen zu Computergraphik I

Transcrição

¨Ubungen zu Computergraphik I
TU Clausthal
Institut für Informatik
21. November 2006
Prof. G. Zachmann
R. Weller
Wintersemester 2006/2007
Übungen zu Computergraphik I - Blatt 4
Abgabe am Donnerstag, dem 30. 11. 2006, 10:00 Uhr
Aufgabe 1 (OpenGL/Qt, 10 Punkte)
Auf der Webseite zur Vorlesung liegt eine kleines Rahmenprogramm für die folgende Aufgabe zum
Download bereit.
a) Erweitern Sie die Methode void GLWidget::drawCube(), so dass ein Würfel mit roten Seitenflächen dargestellt wird. Der Mittelpunkt des Würfels soll im Ursprung liegen und er soll eine
Kantenlänge von 2 haben.
b) Der Würfel soll sich jetzt ununterbrochen um die y-Achse drehen. Die Rotationsgeschwindigkeit
soll sich mittels der rechten und linken Pfeiltaste verändern lassen, d.h. mehrfaches Drücken einer
Taste soll die Rotationsgeschwindigkeit erhöhen bzw. verringern.
Betrachten Sie dazu die Funktion GLWidget::timerEvent( QTimerEvent *e ). Diese Funktion
wird nach einer bestimmten Zeit, die man in startTimer() spezifiziert, immer wieder aufgerufen.
Ein Anwendungsbeispiel finden Sie in dem Programm aus den letzten Übungen. Mittels der Funktion GLWidget::keyPressEvent( QKeyEvent * e ) können Tastatureingaben abgefragt werden.
c) Stellen Sie den Würfel als Drahtgittermodell dar.
d) Erweitern Sie Ihr Programm, so dass ein zweiter Würfel im Wireframe-Modus dargestellt wird.
Es soll möglich sein, diesen mittels der Pfeil-hoch- bzw Pfeil-runter-Tasten entlang der x-Achse zu
verschieben. Der Würfel soll in grün dargestellt werden und sich mit der gleichen Geschwindigkeit
wie der rote Würfel drehen.
Tipp: Verwenden Sie glPushMatrix() und glPopMatrix().
Hinweis: Bedecken Sie je ein Auge mit roter bzw. grüner Folie. Wenn die Würfel eine geeignete
Entfernung voneinander haben, sollte sich ein 3D-Eindruck einstellen. Bis zu den Übungen nächste
Woche sollten auch die entsprechenden Rot-Grün-Brillen eingetroffen sein :-).
Zusatzaufgabe (ohne Bewertung): Verwenden Sie statt des Würfels das Drahtgittermodell einer
Kugel. Dazu können Sie die Funktion drawSphere(GLfloat r, int d) aus dem Rahmenprogramm verwenden.
Aufgabe 2 (Farbtransfer, 10 Punkte)
Implementieren Sie die in der Vorlesung vorgestellte Methode des Farbtransfers. Auf der Website zur
Vorlesung finden Sie ein Qt-Rahmenprogramm für diese Aufgabe.
a) Implementieren Sie in der Klasse MainWindow die Funktion
QImage doColorTransfer( QImage source, QImage target ). Diese Funktion erhält als Eingabe das Source-Bild s und das Target-Bild t und liefert das Ergebnisbild t0 zurück.
1
b) Vervollständigen Sie die Funktion void paintColorDistribution() in der Klasse GLWidget, so
dass beim Anklicken eines der drei Bilder die jeweilige Farbverteilung angezeigt wird. Zeichnen
Sie dazu zu jeder Farbe, die im Bild vorkommt, einen ebenso gefärbten Punkt an entsprechender
Stelle im RGB-Würfel.
2