Computergraphik - WS 19/20

Diese Vorlesung soll eine Einführung in die theoretischen und methodischen Grundlagen der Computergraphik geben, als auch die Grundlagen für die praktische Implementierung von computergraphischen Systemen legen.

Der Schwerpunkt liegt auf Algorithmen und Konzepten zur Repräsentation und Visualisierung von polygonalen, 3-dimensionalen graphischen Szenen. Die Übungsaufgaben werden teils theoretisch, teils praktisch sein, wobei die praktischen Aufgaben gewisse Programmierfähigkeiten in C++ verlangen. Ich empfehle den Besuch des "Propädeutikums C/C++" vor der Computergraphik-Vorlesung. Die theoretischen Aufgaben setzen teilweise einfache Matrix-Vektor-Rechnung voraus.

Bemerkung: in der Vorlesung wird nicht die Benutzung von fertiger Software zur Modellierung, Animation, oder Bildbearbeitung (z.B. Photoshop, Blender, Maya, Cinema4D, etc.) behandelt! Wir beschäftigen uns mit den Algorithmen, die hinter diesen Programmen stecken.

Aus dem Inhalt:

  1. Gerätetechnische Grundlagen
  2. Mathematische Grundlagen
  3. OpenGL 3 and C++
  4. 2D Algorithmen der Computergraphik (Scan Conversion, Visibility Computations, etc.)
  5. Theorie der Farben und Farbräume
  6. 3D Algorithmen der Computergraphik (Rendering Pipeline, Transformationen, Beleuchtung, etc.)
  7. Techniken zum Echtzeit-Rendering
  8. Shader
  9. Texturierung

Aktuelles

Klausur: 9. März, 13:00, im NW1 HS 0020

Folien

Die folgende Tabelle wird die behandelten Themen und die dazugehörigen Folien enthalten.

Woche Thema Folien Übungsaufgaben Frameworks
1. Organisation, Einführung, Geschichte,
Display-Technik: Raster- und Vektor-Graphik, Critical Flicker Frequency, Buffering-Varianten (double buffering, triple buffering), Synchronisation-Verfahren (VSYNC, GSYNC et al.), Display-Technologien (CRT), Gammakorrektur,
PDF1
PDF2
Blatt1 OpenGL 3 Qt Example
Sphere Flake Example
2. Geometrie 1: geometrische Bedeutung des Skalar- und Kreuzproduktes, Koordinatensysteme, Flächeninhalt von Dreieck und Polygonen, geometrische Prädikate, Konvexität, Volumen von Spat und Tetraeder, parametrische Darstellung von Linie und Ebene, lineare Interpolation, implizite Ebenengleichung, Dreiecke.
PDF Blatt2 Matrix
3. Übersicht über die Graphik-Pipeline, verschiedene Sichtweisen der Pipeline (Operationen, Datenfluß).
Einführung in OpenGL: programmable Pipeline, Shader-Programme, immediate mode versus retained mode, vertex array objects, vertex buffer objects.
PDF Blatt3 Edge
4. Rasterisierung von Linien: Midpoint-Algorithmus, Interpolation entlang der Linie, Span-basierte Scanline-Conversion, Anwendung auf Raycasting zum Terrain-Rendering, Anwendung auf Continuous Collision Detection mit Voxmap-Pointshell-Verfahren, scan conversion of circles. PDF Blatt 4 Midpoint
5. Baryzentrische Koordinaten: baryzentrische Kombinationen, affine Abbildungen, konvexe Hülle, Isolinien der baryzentrische Koordinaten in einem Dreieck, Berechnungsmethoden, baryzentrische Interpolation, Anwendungen: Kürzeste Distanz Punkt-Dreieck, Punkt-in-Dreieck-Test, Dreieck-Dreieck-Schnittest, PDF Blatt 5
6. Polygon Scan Conversion: Rasterisierung von Dreiecken, Algorithmus von Pineda, Parallelisierung (und die Pixel-Planes-Story).
Füllen nicht-einfacher Polygone: Odd-Even-Rule, Winding-Number-Rule, Verallgemeinerung. Flood Fill.
Triangulation: ein O(n log n) Algorithmus, Art Gallery Theorem,
Font-Rendering: Grundbegriffe, Bezier-Kurven, Flag-Fill-Algorithmus von Ackland,
PDF Blatt 6 Pineda
7. Visibility Computations: Painter's Algorithm, Z-Buffer, Interpolation der Z-Werte, Z-Fighting, Depth-of-Field Rendering, Depth Complexity & Overdraw, Hierarchischer Z-Buffer, Performance-Trick "Early Z-Pass", Object-Space- & Image-Space-Algorithmen, BSP-Tree, depth sorting using BSP, camera collision detection using BSP, PDF Blatt 7 BSP Tree
8. Visibility Computations 2: Warnock-Algorithmus, Quadtree und Octree, Octree Textures, Stencil-Buffer, Rendering von Spiegeln mittels Stencil-Buffer, Shadow-Volumes, Rendering von Schatten mittels Shadow-Volume-Technik und Stencil-Buffer.
Transformationen: Koordinatensysteme in der Pipeline, elementare Rotation, orthogonale Matrizen, Skalierung, Scherung, Spiegelung, Concatenation,
PDF1 PDF2 Blatt8 Transformation
9. Transformationen 2: Euler-Winkel, Gimbal Lock, Rotation um beliebige Achse mittels Basiswechsel, Zerlegung einer Rotationsmatrix, Quaternionen, Darstellung und Durchführung von Rotationen mittels Quaternionen, Interpolation von Orientierungen mittels Quaternionen, virtueller Trackball, affine Abbildungen, homogene Koordinaten, Translation, Anatomie einer Matrix, starre Transformationen, Berechnung einer Rot.matrix für beliebige Achse+Winkel im Raum, Klassifikation aller Transformationen, Matrizen in OpenGL, Transformation von Normalen, relative/hierarchische Transformationen, Objekthierarchien und Matrix-Stack, Hand-Eye Calibration. PDF Blatt 9 Billiard
10. Projektionen & Perspektive: Kamera-Transformation, orthographische Projektion, perspektivische Projektion, Eigenschaften der perspektivischen Projektion, allgemeine projektive Abbildungen, Projektion in OpenGL
Farben: Licht, Lichtquellen, Chromatizität, Reflectance spectrum, das Auge, Human Spectral Sensitivity, wahrgenommener Stimulus,
PDF1 PDF2
11. Farben 2: Metamere, Grassmann'sche Experimente und Gesetze, wahrgenommene Gleichheit von Spektren, die "Sensor-Abbildung", Definition des Begriffes "Farbe", die Matching Curves, CIEXYZ-Farbraum, Chromatizitätsdiagramm, Gamut, Gegenfarbenmodell, Farbmodelle RGB, CMY, HSV, HSL, Color-Maps, Interpolation von Farben, Abstand zwischen Farben, uniforme Farbräume, CIE Lab-Farbraum, Farbtransfer. PDF
12. Lighting & Shading: Arten von Lichtquellen, diffuse Reflexion, spiegelnde Reflexion, Phong-Beleuchtungsmodell, Blinn-Phong-Modell, BRDF's, Lafortune-Modell, Flat-/Gouraud-/Phong-Shading, Mach-Bänder, Per-Pixel-Shading, two-sided lighting, Beleuchtung in OpenGL, Dämpfung.
Shader Programming 1: fixed-function pipeline, programmable pipeline, vertex processor, fragment processor,
PDF1 PDF2
13. Shader Programming 2: Einführung in GLSL, Uniform- und Attribut-Variablen, Geometrie-Modifikation, Toon- and Gooch-Shader, Per-Pixel-Lighting, deferred shading,
Texturierung: Übersicht, diskrete & prozedurale Texturen, formale Definition, Texturkoordinaten (stückweise lineare Parametrisierung), Texturkoordinaten-Interpolation (nur linear), Modulation der Beleuchtung durch Texturen, gloss map, alpha map, bump mapping,
Tips für Prüfungsvorbereitungen
PDF1 PDF2 PDF3
0.

Video-Aufzeichnungen der Vorlesung vom WS 17/18 findet ihr am Ende des Semesters hier.
Das Passwort ist "cg1718".
Vielleicht können die Videos bei der Vorbereitung zur Prüfung helfen. Aber Achtung: der definitive Stoff ist der, der in obiger Tabelle aufgelistet ist!

Literatur

Folgende Literatur eignet sich als begleitende Literatur:

Falls Sie sich diese Bücher anschaffen möchten sollten Sie vielleicht überlegen, gebrauchte Exemplare zu erwerben -- oft gibt es diese zu einem Bruchteil des Neupreises. Zwei gute Internetadressen sind Abebooks und BookButler.

Übungsbetrieb

Die Übungsblätter werden jeweils am Montag auf der Homepage der VL (also hier) ins Netz gestellt.

Die Abgabe der Lösungen ist jeweils am Sonntag bzw. eine Woche später per Git. Bitte erstellt Euch Euer Repository beim gitlab.informatik.uni-bremen.de und ladet uns (dittmann, mkalusch, rfischer) als Developer ein. Die Korrektur laden wir direkt in eure Repos hoch.

Hinweise zur Klausur

Die Klausur ist "closed book, open notes", d.h., während der Klausur sind erlaubt:

Außer diesen Dingen darf sich sonst nichts auf dem Tisch befinden, insbesondere nicht erlaubt sind:

Hier findet Ihr einige Probeklausuren. (Etliche sind auf Englisch, die richtige Klausur wird natürlich auf Deutsch sein.) Der ZIP-File ist Passwort-geschützt -- Ihr bekommt das Passwort von Eurem Tutor oder Professor.
Bitte lasst euch nicht von einer eventuell leicht abweichenden Terminologie irritieren. Es gilt in der Klausur immer die Terminologie, die ich eingeführt habe. Lasst Euch bitte auch nicht von der Fülle der Probeklausuren einschüchtern. Ihr müsst sicherlich nicht alle durchrechnen, um fit zu werden.

Online Literatur und Links zum Programmieren in C/C++ und in OpenGL

Online Literatur und Resources zu Computergraphik

Tools and Demos

Videos

Literatur und Infos, die nichts mit Computergraphik zu tun haben

Gabriel Zachmann
Last modified: Sun Feb 16 13:27:33 MET 2020