¨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