Labor Grafikprogrammierung
Wochenstunden | 1 Vorlesung + 1 Ãœbung |
Prüfungsart | Laborübung |
Frequenz | jährlich (Sommersemester) |
Credit Points | 6, unbenotet |
Hinweis: Dieses Labor wurde grundlegend überarbeitet. Eine aktualisierte Zusammenfassung der Inhalte finden Sie weiter unten.
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 (Grundlegende Java-Kenntnisse sind ausreichend) gerecht zu werden, wird ein Framework bereitgestellt, welches Aufgaben wie GUI-Programmierung, Zeichenfunktionen, etc. auf ein Minimum reduziert.
Voraussetzungen
Auch wenn die Programmierung in C++ erfolgt, sind grundlegende 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. Auf sprachspezifische Details wie Speicherverwaltung und Pointer-Strukturen muss nicht explizit eingegangen werden.
Empfohlen wird der Besuch der Vorlesung Graphische Datenverarbeitung I, in der die theoretischen Grundlagen einiger Aspekte des zu implementierenden Systems erklärt werden.
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.
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 abgebildet.
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, Hitzeflimmern, etc.)