Labor:
Grafikprogrammierung / Graphische Datenverarbeitung
werden dieses Jahr die Anmeldungen im StudIP individuell freigeschaltet.
Wochenstunden: | 1 Vorlesung +Blockzeiten |
Prüfungsart: | Laborübung |
Frequenz: | jährlich (Sommersemester) |
Credit Points: | 6, unbenotet |
Zielsetzung
Ziel dieses Kurses ist es, den Aufbau moderner Grafikhardware (wie z.B. aktueller GeForce/Radeon Grafikkarten) kennen zu lernen und deren Funktionsweise nachzuvollziehen.
Im Rahmen dieser Veranstaltung wird neben der direkten Verwendung der Grafikkarte durch die OpenGL Schnittstelle auch ein einfacher Software-Renderer programmiert. Dieser ist der Struktur einer modernen Grafikpipeline nachempfunden und ermöglicht so einen Blick "Hinter die Kulissen" von z.B. Computerspielen und aktueller Grafikanwendungen. Auch aktuelle Konzepte, wie Shaderprogrammierung und visuelle Effekte, sind integraler Bestandteil dieses Kurses.
Die Abgaben des Labors werden in C++ programmiert. Um auch Programmieranfängern (solide Java-Kenntnisse sind dennoch Voraussetzung) gerecht zu werden, wird ein Framework bereitgestellt, welches Aufgaben wie GUI-Programmierung, Zeichenfunktionen, Speicherverwaltung, etc. auf ein Minimum reduziert.
Voraussetzungen
Auch wenn die Programmierung in C++ erfolgt, sind solide Java-Kenntnisse ausreichend. Materialien für den schnellen Einstieg in C++ werden bei Bedarf bereitgestellt. Durch das vorgegebene Framework wird die Programmierung weitestgehend auf die Implementation einer vorgegebenen Klassenstruktur reduziert.
Empfohlen wird der Besuch der Vorlesung Graphische Datenverarbeitung, in der die theoretischen Grundlagen einiger Aspekte des zu implementierenden Systems erklärt werden. Es wird davon ausgegangen, dass die Teilnehmer über Grundkenntnisse der linearen Algebra verfügen.
Die Teilnehmer können in Kleingruppen (bis max. 2 Personen) zusammenarbeiten und müssen am Ende des Semesters ein komplettes Programm abgeben und alle Programmteile erklären können. Im zweiten Teil des Labors werden auch aufwändigere OpenGL Themen zur eigenständigen Bearbeitung vergeben. (Hier sind je nach Komplexität des Themas auch größere Gruppen möglich.)
Inhalte
Der Kurs gliedert sich in zwei Teile:
Im ersten Teil wird auf die Grundlagen der 3D-Visualisierung eingegangen. Die Teilnehmer programmieren Schritt für Schritt einen softwarebasierten Renderer, der beliebige Meshes darstellen kann. Das verwendete PLY-Format ermöglicht es den Teilnehmern mit Hilfe von Programmen wie Blender auch selbst kreativ zu werden.
Ausgehend von einer einfachen Darstellung als Punktwolke wird das Programm nach und nach zu einem vollwertigen Softwarerenderer ausgebaut. Dieser umfasst:
- Füllen von Dreiecken
- Interpolation von Farbinformationen
- Einfache Texturierung
- Verschiedene Beleuchtungsmodelle wie Flat-/ Gouraud- und Phong-Shading
Darüber hinaus werden auch Konzepte wie Z-Buffering, Vertex- und Pixelshader, Projektionsarten und Kamerasteuerung diskutiert und implementiert.
Der zweite Teil greift die Überlegungen des ersten Teils auf und zeigt, wie die erarbeiteten Strukturen auf moderne Grafikhardware übertragen werden können. Es wird gezeigt, wie mit Hilfe der OpenGL Grafikschnittstelle die bisherigen Ergebnisse um ein vielfaches beschleunigt werden können.
Bei der Einführung in OpenGL wird konsequent auf die Version 3 der OpenGL-Spezifikationen gesetzt. Daher Umfasst dieser Kurs auch eine Einführung in die Shaderprogrammierung.
Je nach zur Verfügung stehender Zeit werden folgende Themen behandelt:
- VertexBufferObjects und VertexArrayObjects
- Vertex- und Fragment-Shader
- Texturemapping
- FrameBufferObjects
- Vollbild Effekte (wie z.B. Bloom, SSAO, etc.)