Graphikprogrammierung in C++
von
Nassir Navab,
Tobias Sielhorst,
Joerg Traub &
Florian Krueger
Typ: Programmierpraktikum Grundstudium
Generelle Studienplaneinordnung: BS-INF WA ab 2, INF. prakt. WP ab 2
Vorbesprechung: - Anwesenheitspflicht für alle Teilnehmer.
ECTS: 6 Credits
Wöchentliches Treffen: Di 16:00-18:00 Uhr MI 03.13.010
Erstes Treffen: Di 18.10.2005 16:00-18:00, MI 02.13.010
Lab: 02.13.008
Programmierbetarung: Fr 14:15-15:15Uhr
NEW
Vorbesprechung: 18.10.2005 (erstes wöchentliches Treffen)

Screenshots der Wintergames von Florian Krüger und Ralf Stauder entwickelt im Programmierpraktikum WS04/05.
Inhalt
C++: Programmer's Weapon of Choice. Insbesondere auf dem Gebiet der Computer Graphik (Game Programming, etc.) wird die Prgrammiersprache C++ der Alternative Java in jedem Fall vorgezogen. In diesem Praktikum wird grundlegendes Wissen zur Programmierung mit C++ vermittelt. Alle Beispielaufgaben für das Praktikum kommen aus dem Gebiet Computer Grafik und Computer Vision. Für die Bearbeitung und Implementierungen werden Teams zu je zwei bis drei Personen gebildet. Die Aufgaben werden mit GNU Compiler Collection (g++,gcc) bearbeitet.
Das Praktikum ist in zwei Abschnitte unterteilt.
Im ersten Abschnitt werden grundlegende Konzepte der C++ Programiersprache, OpenGL und Team Based Software Engineering behandelt. Themen hierbei sind
- Tool für die Versionskontrolle SVN
- Präprozessor
- der C++ Compiler
- Linker/Einbinden von Bibliotheken
- Pointer, Felder und Strukturen
- Standard Template Library
- Makefiles
- aktuelle IDEs (Visual Studio/Eclipse)
- Debuggen
- Objektorientierung
- Grundlagen von OpenGL
Im zweiten Abschnitt des Praktikums wird sukzessive eine komplexere Aufgabenstellung (kleines interaktives Spiel) erarbeitet. Die hierfür benötigten Programmiertechniken bauen auf den in Abschnitt eins des Praktikums erarbeitet Techniken auf.
Wöchentlicher Ablauf
- Montag 12:00 – Neues Aufgabenblatt ist online verfügbar.
- Dienstag 16:00-18:00 – Wöchentliches Treffen
- Dienstag-Montag – Implementierung der Aufgaben in Teams
- Montag 12:00 - Abgabe der Aufgaben (SVN commit)
Aufgaben
| Datum | Thema | Aufgabe | Merkblatt/Lösungshinweise |
| 18.10.05 | Header-files, Praeprozessor, Compiler, Linker | Übungsblatt 1 | Merkblatt 1 |
| 25.10.05 | Funktionen, Attribute, Kontrollstrukturen, Makefiles, VS .NET 2003, SVN, Pointer, Arrays, Bildmanipulation | Übungsblatt 2 | Merkblatt 2 Kurzeinführung in make |
| 08.11.05 | Pointer, Refernzen und Objektorientierung in C++ | Übungsblatt 3 | KlassenundNamespaces.pdf, PointerundReferenzen.pdf |
| 15.11.05 | no class - SVV | | |
| 22.11.05 | 2D Transformation, Grundlagen von OpenGL | Übungsblatt 4 | Bibliotheken und Erste Schritte in OpenGL.pdf |
| 29.11.05 | Debuggen, 3D Transformationen und Lichtin OpenGL | Übungsblatt 5 | OpenGL Teil II.pdf und DebuggeninC.pdf |
| 06.12.05 | Texturen, Material und Transparenz | Übungsblatt 6 | OpenGL Teil III |
| 13.12.05 | QT: User Interfaces in C++ | Übungsblatt 7 | Erste Schritte in QT und Erklärungen zu Aufgabe 18 |
| 20.12.05 | QT and OpenGL, Vorstellung der Abschlussarbeit | Übungsblatt 8 | Abschlussaufgabe - Merkblatt 1 |
| 09.01.05 | Teampräsentationen der Ideen für die Abschlussarbeit | | |
| 16.01.05 | Displaylisten, Kollisionsdetection, Einfache Physiksimulation, Einfache Explosionen | Displaylisten.pdf | |
| 23.01.05 | API für Bronchen | | |
| 30.01.05 | Programmierberatung 15-17Uhr 02.13.008 | | |
| 07.02.05 | Programmierberatung 15-17Uhr 02.13.008 | | |
| 14.02.05 | Präsentation der Abschlussarbeit 15-17Uhr 03.13.010 | | |
| 14.02.05 | Präsentation der Abschlussarbeit 15-17Uhr 03.13.010 | | |
Teams
- Team 1 - Nataliya Vildshteyn, Pierre Schroeder
- Team 2 - Manfred Pauli, Julian Cócera Canas
San Fermin
Mock-up
- Team 3 - Florian Zuleger, Ilja Herdt
- Team 4 - Pavel Mihaylov, Jörg Böhnel
- Team 5 - Jürgen Bräckle, Florian Walter
- Team 6 - Simon Stauber, Tobias Kächele
- Team 7 - Dominik Zäuner, Michael Bothmann
- Team 8 - Taha Sabri Koltukluoglu, Andreas Amereller und Musa Hatipoglu
- Team 9 - Juergen Bohn, Kristofer Othzen
Voraussetzungen
Es wird kein C++ Wissen vorausgesetzt. Das Praktikum soll eine grundlegende Einführung in die C++ Programmiersprache geben. Java-Kenntnisse können von Nutzen sein. Konzepte der Programmierung und der Objektorientierung, soweit in "Einführung in die Informatik I & II" behandelt, werden vorausgesetzt.
Voraussetzungen für den Schein
- Einreichung der Aufgaben in Teamarbeit von zwei bis drei Teilnehmern bis spätestens Montag
- Mindestens 8 von 9 Aufgabenblättern wurden korrekt bearbeitet
- Aktive Mitarbeit bei den wöchentlichen Treffen
- Abgabe der Projektaufgabe
- Teamarbeit
- Bestehen eines 5min Testats
Weiterführende Literatur und Tutorials
C++ Tutorials
C++ Referenzen
Advanced Programming with C++
- Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Designs Eine Anleitung, um C++-code effizient, robust, konsistent, portierbar und wiederverwendbar zu entwerfen, bzw. umzuschreiben
- Scott Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Designs Eine Anleitung, um C++-code noch effizienter, robuster, konsistenter, portierbarer und wiederverwendbarer zu machen
OpenGL
- Dave Shreiner, Mason Woo, Jackie Neider, OpenGL Programming Guide 'The Red Book' kann auch hier eingesehen werden. Grundlegendes Buch für die Open Graphics Library, einer Softwareschnittstelle zur Graphik Hardware. Behandelte Themen sind u.a. das Zeichnen geometrischer Objekte, Farben, der Einfluss auf Licht auf eine Szene, die Representation von Kameras, mit der eine Szene betrachtet werden kann und auch Hardware-nähere Techniken wie Antialiasing, Texture Mapping, oder Framebuffer Control
- Dave Shreiner, OpenGL Reference Manual 'The Blue Book' kann auch hier eingesehen werden. Es wurde von den OpenGL Software-Architekten geschrieben und sollte erst verwendet werden, wenn eine gewisse Sicherheit im Umgang mit C++ erreicht wurde. Es enthält alle relevanten OpenGL Methodiken und dazu Code-Beispiele
- NEHE - An Excellent OpenGL Web Tutorial Tutorials und mehr zu OpenGL auf Englisch. Hier die deutsche Übersetzung.
- Folgende Referenz ist eher für Interessierte nach dem Kurs. Sie beschäftigt sich mit der Frage, wie man OpenGL Aufrufe geschickt benutzt, damit sie noch schneller ausgeführt werden (OpenGL tuning). Auf Englisch.
English Version
General content
The course is intended to teach you the basic concepts of C++. All assignments will focus on computer graphics and computer vision applications. You will be confronted with preprocessing, compiling, linking, the language itself, version control (SVN), makefiles, modern IDEs (Visual Studio), debugging, and a little on object orientation.
Prerequisites
The course is intended to teach C++, so knowledge of it is not necessary. Knowledge of JAVA would be of great advantage. The concepts of OO Programming and other concepts as conducted in the Introduction to CS lecture are assumed.
Schein requirements
Active participation in the weekly meeting, submission of the implementation of the weekly assignments of part I, teamwork, and the presentation of the final assigment.