• Martin Thoma
  • Home
  • Categories
  • Tags
  • Archives
  • Support me

Computergrafik - Klausur

Contents

  • Behandelter Stoff
  • Folien
    • Bilder, Farbe, Perzeption
    • Raytracing
    • Transformationen und homogene Koordinaten
    • Texturen
    • Räumliche Datenstrukturen
    • Rasterisierung, Clipping und Projektionstransformationen
    • OpenGL
    • Prozedurale Modellierung, Content Creation
    • Kurven und Flächen
    • Übungen
  • Material und Links
  • Literatur
  • Übungsbetrieb
  • Termine und Klausurablauf
Dieser Artikel beschäftigt sich mit der Vorlesung „Computergrafik“ am KIT. Er dient als Prüfungsvorbereitung. Ich habe die Vorlesungen bei Herrn Prof. Dr. Ing. Carsten Dachsbacher im Wintersemester 2015/2016 gehört.

Behandelter Stoff

Datum Kapitel Inhalt
20.10.2015 Einleitung Viele nette Bilder und Beispiele, wenig Inhalt
22.10.2015 Farbe, Darstellung & Perzeption Weber-Fechner-Gesetz, Abtasttheorem, Dynamikumfang, Farbwahrnehmung im menschlichen Auge; Gammakorrektur
26.10.2015 Übung gdb (bt - backtrace; p - print)
26.10.2015   Metamerismus: Unterschiedliche Spektren können gleichen Farbeindruck erwecken
Addiere/subtrahiere Farbmischung
CMY / CMYK / RGB / HSV / XYZ
Weber-Fechner-Gesetz: 2% heller
29.10.2015 Ray-Tracing: Kapitel 2 Menschen nehmen Kontrastintensität und Luminenz besser als Chrominanz war. Das ermöglicht Kompression.
clear-type / subpixel Darstellung
Jaggies: Unerwünschter Treppenstufen-Effekt bei Rasterisierung von Strecken
Kamera: Position (x,y,z), Blickrichtung (zu einem Punkt mit Koordinaten (x,y,z)) und up-Vektor
Skalarprodukt, Kreuzprodukt
Baryzentrische Koordinaten,
02.11.2015 Übung Rasterisierung von Linien (Implizite Darstellung)
zbuffer: Tiefe des "nächsten" Polygons pro Pixel wird gespeichert
Konsistenzregeln, z.B. wenn man zwei benachbarte farbige Dreiecke mit Diagonale hat und man die Farbe des Pixels berechnen muss, durch den beide Dreiecke teilweise gehen (37 Fälle; Katalog von Microsoft; macht die Hardware)
26.11.2015 ? Sphere Mapping; Vorfilterung von Environment Maps
10.12.2015 Räumliche Datenstrukturen BSP-Baum, kD-Baum
14.01.2016 OpenGL  
18.01.2016 Übung Koordinatensystem-Pipeline, Shader
19.01.2016 Erzeugung von Landschaften Rotes / Rosa Rauschen, Lattice Value Noise, Perlin-Rauschen

Folien

Bilder, Farbe, Perzeption

Slide: 01_ Bilder, Farbe, Perzeption - Teil1.pdf

Frame Buffer
Speichert Bilder zur direkten wiedergabe auf dem Bildschirm.
Ditherhing (Fehlerdiffusion)
Ditherhing ist eine Methode zur Illusion einer größeren Farbtiefe.
Gamma-Korrektur
$$I_{\text{out}} = I_{\text{in}}^\gamma$$
Transferfunktion
Eine Abbildung $f$ von Farbwerten auf Helligeit: $$f: [0, N] \rightarrow [I_{\text{min}}, I_{\text{max}}]$$ Diese Abbildung ist abhängig vom Display.
Dynamikumfang
Der Dynamikumfang beschreibt den erreichbaren Kontrast eines Wiedergabegrätes (Bildschirm, Beamer): $$R_d = \frac{I_{\text{max}} + k}{I_{\text{min}} + k}$$ $k$ ist dabei das Umgebungslicht, $I_{max} / I_{min}$ sind Konstanten des Displays und geben die maximale bzw. minimale Helligkeit an.
Gammut (Farbgammut)
Der Gamut eines Monitors entspricht dem Spektrum der darauf darstellbaren Farben.
Farbtemperatur
Die Farbtemperatur ist ein Maß, um einen jeweiligen Farbeindruck einer Lichtquelle zu bestimmen.
Schwarzkörper, Schwarzkörperstrahlung
Ein Schwarzkörper ist eine idealisierte thermische Strahlungsquelle. Die idealisierung besteht darin, dass der Körper die komplette auftretende Strahlung vollständig absorbiert. Gleichzeitig sendet er Wärmestrahlung (Schwarzkörperstrahlung) aus, welche nur von seiner Temperatur abhängig ist.

Slide: 01_ Bilder, Farbe, Perzeption - Teil2.pdf

Additive Farmbischung
Grundfarben: Rot, Grün, Blau
Anwendung: Bildschirm
Subtraktive Farbmischung
Grundfarben: Cyan, Magenta, Gelb
Anwendung: Drucker
Graßmansche Gesetze
Jeder Farbeindruck kann mit 3 Grundgrößen beschrieben werden.
Weber-Fechner-Gesetz
Das Weber-Fechner-Gesetz macht eine Aussage über die subjektiv empfundene Stärke von Sinneseindrücken im Abhängigkeit von der Intensität des Helligkeitsunterschiedes: $$E = c \cdot \frac{R}{R_0}$$ wobei $E$ die empfundene Reizstärke, $c$ eine Konstante, $R$ die tatsächliche Reizstärke und $R_0$ eine Referenzreizstärke ist.
  • RGB-Farbraum: Addition der Spektren, wird bei CRT/LCD-Farbmonitoren verwendet.
  • CMY, CMYK: Subtraktive Farbmischung, wird bei Druckern verwendet. K (schwarz) nur aus praktischen Gründen.
  • HSV-Farbraum: Weder Additiv noch subtraktiv, wird bei Benutzerschnittstellen verwendet
  • CIE Color Matching Functions
  • XYZ Color Space: Farbraum für Konversion zwischen Farbräumen
  • Chromatizität
  • xyY Farbraum
  • Machsche Streifen / Bandeffekte
  • Hermann-Gitter / Laterale Hemmung
  • Windows clear type / Subpixel

Raytracing

Side: 02_ Raytracing (enthalt Abtastung aus Kapitel 1).pdf

Ray-Tracing
Ray-Tracing ist ein Verfahren zum Erzeugen Fotorealistischer Bilder. Dabei geht man prinzipiell wie folgt vor:
  1. Strahlerzeugung: Für jeden Pixel werden Sichtstrahlen erzeugt
  2. Schnittberechnung: Finde das primitiv (z.B. Dreieck) welches der Strahl schneidet und welches am nächsten zur Kamera ist und vor der Kamera liegt.
  3. Schattierung: Beleuchtungsberechnung (shading)
Phong-Beleuchtungsmodell
Das Phong-Beleuchtungsmodell besteht aus 3 Komponenten:
  • Ambiente Beleuchtung: Materialkoeffizient $k_a$. Ambiente Beleuchtung ist indirekte Beleuchtung, also Licht von anderen Oberflächen
  • Diffuse Beleuchtung: Materialkoeffizient $k_d$. Diffuse Beleuchtung ist die Streuung des Lichts nahe beim "Streupunkt" (nach dem Lambertschen Gesetz).
  • Spekulare Beleuchtung: Materialkoeffizient $k_s$ sowie Phong-Exponent $n$. Unter spekularer Beleuchtung versteht man direkte Spiegelung der Lichtquelle (imperfekte Spiegelung)
Das Ergibt folgende Formel für die Intensität $I$: $$I = \overbrace{k_a \cdot I_L}^{\text{ambient}} + \overbrace{k_d \cdot I_L \cdot (N \cdot L)}^{\text{diffus}} + \overbrace{k_s \cdot I_L \cdot (R_L \cdot V)^n}^{\text{spekular}}$$ hierbei ist $I_L$ die Lichtintensität, die Richtung die das Licht nimmt $L$ sowie die Oberflächennormale $N$ und der Lichtreflektionsvektor $R_L$. Der Vektor $R_L$ liegt in der selben Ebene wie $N$ und $L$. Es gilt $R_L = 2N \cdot (N \cdot L) - L$.
Z-Fighting
Polygone, welche in der selben Ebene liegen führen zu einem Flackern welches der beiden Polygone nun angezeigt wird. Dies kann verhindert werden, indem eines der Polygone minimal verschoben wird.
Tessellation
Parkettierung, also das Füllen einer Fläche mit Primitiven.
Distributed Ray Tracing
Bilder welche mit dem Whitted-Style Ray Tracing Verfahren gerendert wurden sehen zu perfekt aus. Die perfekte Spiegelung und Trasmission, die harten Schattenkanten und die unendliche Schärfentiefe kennen wir von realen Kameras so nicht. Distributed Ray Tracing ist eine alternative zu Whitted-Style Ray Tracing, welche diese Probleme zu lösen versucht. Dabei wird bei jeder Spiegelung nicht ein Schattenstrahl verschickt, sondern viele welche sich um den "Perfekten" Strahl konzentrieren.
  • Nyquist-Shannon-Abtasttheorem
  • Vektoren, Ortsvektoren, Skalarprodukt
  • Parametrisierte Geraden- und Ebenendarstellung
  • Baryzentrische Koordinaten
  • Strahl-Kugel-Schnitt
  • Spekulare Reflektion
  • Diffuse (Lambertsche) Reflektion
  • BRDF - Bidirectional Reflectance Distribution Function
  • Phong Beleuchtungsmodell
  • Snellsches Brechungsgesetz
  • Fresnel-Effekt
  • Anti-Aliasing Strategien: Uniformes Supersampling, Adaptives Supersampling, Stochastisches Supersampling
  • Schattenstrahlen
  • Bewegungs- und Tiefenunschärfe
  • Imperfekte Spiegelung und Transmission

Übungsfolien: 01_ Rasterisierung.pdf

  • Rasterisierung von Linien
    • Brute-Force
    • Inkrementelle Berechnung
    • Bresenham Algorithmus
  • Rasterisierung von Polygonen
  • Sichtbarkeitsproblem
    • Maler-Algorithmus (Painters algorithm)
      • Vorgehen: Sortiere Dreiecke von hinten nach vorne und zeichne sie so.
      • Probleme: Abstandsmaß / Zyklen

Übungsfolien: 07_ Distributed Raytracing.pdf

Hier sind eigentlich nur schöne Bilder. Ohne Kontext bringt der Foliensatz nichts :-/

  • Distributed Raytracing kann Tiefenunschärfe, weiche Schatten und indirekte Beleuchtung.
  • Monte Carlo Integration
  • Pathtracing
  • Many-Lights Method
  • Voxel Cone Tracing
  • Radiance Caches
  • Finite Elemente / Radiosity

Transformationen und homogene Koordinaten

Slide: 03_ Transformationen und homogene Koordinaten.pdf

Orthogonale Matrix
Eine quadratische Matrix $M \in \mathbb{R}^{n \times n}$ heißt genau dann orthogonal, wenn $$M^T \cdot M = M \cdot M^T = I_{n \times n}$$ Für orthogonale Matrizen gilt also $M^{-1} = M^T$
Homogene Koordinaten
Der euklidische bzw. affine Raum wird um sog. Fernpunkte ergänzt.
Rotation
Die Rotation um (0, 0) in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}\cos \alpha & -\sin \alpha & 0\\ \sin \alpha & \cos \alpha & 0 \\ 0 '& 0 & 1\end{pmatrix}$$
Skalierung
Eine Skalierung in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}s_x & 0 & 0 & 0\\ 0 & s_y & 0 & 0\\ 0 & 0 & s_x & 0\\ 0 & 0 & 0 & 1\end{pmatrix}$$
Scherung
Eine Scherung in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}1 & 0 & d_x & 0\\ 0 & 1 & d_y & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\end{pmatrix}$$
Koordinatensysteme
  • Objektkoordinaten: Sie werden durch die Modelltransformation zu
  • Weltkoordinaten: Sie werden durch die Kameratransformation zu
  • Kamerakoordinaten
Der Ursprung des Welt-Koordiantensystems wird mit 0 bezeichnet. Die Basisvektoren mit $x, y$. Das Modellkoordinatensystem hat den Ursprung $e$ und die Basisvektoren $u, v$
  • Transformationen werden grundsätzlich so dargestellt: $$x' \gets M \cdot x$$ Es wird also der zu transformierende Vektor von rechts mit der Transformationsmatrix $M$ multipliziert.
  • Spiegelung an der $y$-Achse ist eine Multiplikation der $x$-Koordinaten mit (-1)
  • Hierarchisches Modellieren, Szenengraph

Übungsfolien: 02_ Bildoperationen.pdf

Filter (Bildfilter)
Ein Bildfilter ist ein Algorithmus, welcher als Input ein Bild bekommt und als Output ein Bild liefert. Typischerweise werden lineare Filter verwendet. Beispiele:
  • Helligkeitsänderung
  • Kontraständerung (z.B. unschärfe (blur), schärfen (sharpen))
  • Desaturierung
  • Kantendetektion
Linearer Filter
Gewichtete Summe benachbarter Pixel-Werte. Siehe Interaktives Beispiel
Morphologische Filter
Strukturverändernde Operation (z.B. Dilatation, Erosion, Öffnung, Schließung)

Texturen

Slide: 04_ Texturen.pdf

Texturen
Texturen können vielfältig eingesetzt werden:
  • Klassische Feinstrukturierung
  • Reflektionseigenschaften
  • Farbe
  • Normalenvektoren (Bump- oder Normal mapping)
  • Beleuchtung
    • Environment Mapping, Reflection Mapping
    • Shadow Mapping, Light Mapping
  • Geometrie (Displacement Mapping)
Texturkoordinaten werden üblicherweise mit $(s, t)$ bezeichnet. Manchmal auch mit $(u, v)$. Eine Textur ist im Einheitsquadrat. Eine Textur kann folgendermaßen auf ein Objekt gemappt werden, indem das Objekt in einen Hilfskörper (z.B. Kugel, Würfel, Zylinder) gesteckt wird, auf welchen die Textur bereits gemappt wurde. Dann kann die Textur folgendermaßen auf das Objekt übertragen werden:
  • Normale des Hilfskörpers auf das Objekt
  • Normale des Objekts auf den Hilfskörper
  • Linie durch den Mittelpunkt des Objekts auf den Hilfskörper
Environment Map
Eine Environment-Map ist eine Textur zur Darstellung der Umgebung. Bei Einvironment-Maps nimmt man an, dass der Betrachter weit genug von der Umgebung entfernt ist, sodass die Position keine Rolle spielt und ausschließlich die Blickrichtung wichtig ist. Übliche Parametrisierungen von Environment-Maps sind:
  • Cube Maps
    • + ist bei korrekter Filterung nahtlos
    • + keine Singularität am Rand
  • Sphere Maps
    • - Singularität am Rand
    • + mit Kamera, Chromkugel und Photoshop kann sie recht einfach aufgenommen / erstellt werden
  • LatLong-Map
    • - die Pole werden ungleichmäßig abgetastet
Eine Anwendung war der "flüssige" Terminator im Hubschrauber (Terminator 2).
Cube Map
Um den Hintergrund darzustellen, kann man die Szene in einen von innen texturierten Cubus stecken. Ein Reflektionsrichtung $\mathbf{r} = (r_x, r_y, r_z)$ bestimmt den Punkt auf dem Mantel des Würfels. Die betragsmäßig größte Komponente von $\mathbf{r}$ bestimmt, welche Würfelfläche (links, rechts, vorne, hinten, oben, unten) genommen wird. Abhängig von der orientierung des koordinatensystems in bezug auf die Cube map kann sich dann also folgende Regel ergeben:
  • Wenn $|r_x|$ am größten ist, ist es rechts (< 0) oder links (> 0),
  • wenn $|r_y|$ am größten ist, ist es vorne (< 0) oder hinten (> 0)
  • wenn $|r_z|$ am größten ist, ist es oben (< 0) oder unten (> 0)
Die Texturkoordinaten $(s, t)$ werden z.B. für (right) wie folgt erechnet: $$s = \frac{r_y}{2 \cdot r_x}, \;\;\; t = \frac{r_z}{2 \cdot r_x}$$
Mip-Map (Mip map, Mipmap, Auflösungspyramide)
Mip steht für lat. multum in parvo (viel in wenig). Eine Mip-Map ist eine Vorfilterung von Texturen. Mip-Mapping hilft, wenn man in einem sehr flachem Winkel auf eine Ebene blickt. In einer Mip-Map wird die Original-Textur gespeichert, dann in der ersten Stufe eine Textur welche in beiden Dimensionen auf die hälfte verkleinert wurde (also 1/4 der ursprünglichen Größe). Es wird diejenige Mip-Map Stufe $n$ gewählt, sodass gilt $$\text{Texelgröße}(n) \leq \text{Größe Pixelfootprint auf Textur} < Texelgröße(n+1)$$ Dann wird eine Trilineare Interpolation der 8 nächsten Texel durchgeführt:
  • Bilinear auf Stufe $n$, bilinear auf Stufe $n+1$
  • linear zwischen diesen beiden Farben
Mip-Maps benötigen zusätzlich 1/3 der ursprünglichen Texturgröße.
Isotrope Texturfilterung
Eine Texturfilterung heißt isotrop, wenn sie in alle Richtungen gleich ist. Anisotrope Texturfilterungen sind gewünscht, weil sie in die Tiefe schärfe erhalten können, wohingegen isotrope Texturfilterung in die ferne unscharf wirken können. RIPmaps sind anisotrope Texturfilterungen.

Übungsfolien: 04_ Texturen und Transformationen.pdf

Limitationen von Whitted-Style Raytracing
  • Keine Kaustiken oder korrekte Dispersion
  • Keine indirekte Beleuchtung
  • Keine Flächenlichtquellen
  • Kein Motion-Blur oder Tiefenunschärfe
Mögliche Lösung: Distributed Raytracing
Stratified Supersampling
Strahlen werden durch zufällige Superpixelpositionen geschossen, aber möglichst gleichmäßig um Klumpen zu vermeiden.
  • Transformationen
  • Texturen
    • Repeating / Clamping
    • Bilineare Filterung
    • Aliasing bei Verkleinerung
      • Lösung: Überabtastung oder Vorfilterung (z.B. Mip-Maps)
    • Mip-Maps
      • Auswahl der richtigen Texturgröße

Räumliche Datenstrukturen

Slide: 05_ Raumliche Datenstrukturen.pdf (10.12.2015)

Räumliche Datenstrukturen
  • Hüllkörper
    • Axis-Aligned Bounding Boxes (AABB)
    • Bounding Volume Hierachies (BVH)
  • Reguläre Gitter
  • Oktalbaum (Octree)
  • kD-Baum
AABB (Axis-Aligned Bounding Box)
Axis-Aligned Bounding Boxes sind Rechtecke (Quader in 3D), deren Seiten parallel zu den Achsen des Koordinatensystems stehen. Sie werden als Hüllkörper verwendet. Alles wichtige zu AABBs kann man in Folie 18 - 29 nachlesen.
BSP-Baum (Binary Space Partition Baum)
Teile den Raum mithilfe von Ebenen in zwei Teile. Die Ebenen dürfen beliebig im Raum liegen. Somit wird eine Baumstruktur aufgebaut, welche den Raum in immer kleinere Teile teilt.
kD-Baum
Ein BSP-Baum, welcher nur achsenparallele Ebenen erlaubt. Der Raum wird also mit achsenparallelen Hyperebenen geteilt; es entsteht ein Binärbaum welcher den Raum partitioniert.
Surface Area Heuristic (SAH)
Wähle die Split-Ebene so, dass die Kosten der Traversierung minimiert werden.
Bounding-Volume-Hierachies (BVH)
BVHs sind eine Datenstruktur, welche den Raum in Hüllkörper unterteilt. Man hat also komplexe Objekte. Für diese Objekte muss man Schnittests machen. Das bedeutet im einfachsten Fall, dass man für $n$ Dreiecke und einen Strahl genau $n$ Schnittests machen muss. Interessanterweise dürfen sich Hüllkörper überlappen. Nun könnte man aber - je nach den Objekten - diese in jeweils zwei Quader unterteilen. Wenn der Strahl nur einen Quader schneidet, dann muss man auch nur für die Objekte in diesem Quader Schnittests durchführen. Innerhalb des Quaders kann man natürlich noch weiter die Objekte in Hüllkörper (üblicherweise Quader) unterteilen. Typische Hüllkörper sind:
  • AABB: Axis-Aligned Bounding Boxes
  • Bounding Spheres
  • OBB: Oriented Bounding Boxes
  • Slabs: Schnitt von Paaren paralleler Halbebenen
Die SAH ist ein Kriterium zum aufbau von BVHs / kD-Bäumen. Im Mittel sollen zufällige Strahlen, die den betrachteten Knoten schneiden, den gleichen Aufwand verursachen, egal welcher Kindknoten traversiert wird
Oktalbäume (Octree)
Gitter
Schnitttests können beschleunigt werden, indem über den Raum ein Gitter gelegt wird. Der Raum wird also in kleinere Teile zerlegt.
Ein Octree unterteilt einen Quader in 8 kleiner Quader. Diese können wiederum in 8 kleinere Quader unterteilt werden.
Mailboxing
Speichern des Ergebnisses eines Schnitttests mit einem Objekt, um erneute Schnitttests zu verhindern.

Übungsfolien: 05_ BVH.pdf

  • Median-Split: Die Entscheidung wird anhand der Mittelpunkte der AABBs getroffen.

Rasterisierung, Clipping und Projektionstransformationen

Side: 06_ Rasterisierung, Clipping und Projektionstransformationen.pdf

Tiefenpuffer (Z-Buffer)
Es wird ein Bild gespeichert, welches für jeden Pixel die Tiefe des vordersten Objekts angibt.
Tiefentest
Finden des Bildteiles, der für einen gegebenen Pixel am nächsten vor der Kamera ist.
Clipping
Abschneiden von Linien und Poligonen, die außerhalb des sichtbaren Bereichs liegen. Dies ist wichtig für die behandlung problematischer Fälle bei Projektionen.
Algorithmus von Sutherland-Hodgeman
Dient dem Clipping von Polygonen.
Frustum
Ein Frustum ist ein Kegelstumpf, wobei in der Computergrafik eher ein Pyramidenstumpf gemeint ist. Das View Frustum ist der Bereich der Szene, der sichtbar ist.
Outcodes
Outcodes sind ein 4-Bit binärcode für die Bereiche um die Zeichenebene: $$(x < x_{\text{min}}, x > x_{\text{max}}, y < y_{\text{min}}, y > y_{\text{max}})$$

Übungsfolien: 09_ Clipping.pdf

Clipping von Linien
Ein Rechteck $(x_{\text{min}}, x_{\text{max}}, y_{\text{min}}, y_{\text{max}})$ und eine Linie $P_1 = (x_1, y_1), P_2 = (x_2, y_2)$ ist gegeben. Es gibt den "trivial reject" Fall, bei dem die komplette Linie außerhalb liegt und den "trivial accept" Fall, bei dem die komplette Linie innerhalb des Rechtecks liegt.
Cohen-Sutherland Algorithmus
Der Cohen-Sutherland Algorithmus dient dem Clipping von Linien mit einem Rechteck. Man unterteilt die Ebene, in der das Rechteck liegt in 9 Bereiche: (links oben, links mitte, links unten, mitte oben, mitte mitte,...). Die Punkte bekommen nun jeweils einen "Outcode" der ihre Position bzgl. dieser Bereiche bestimmt: $$\text{Outcode} = (x < x_{\text{min}}, x > x_{\text{max}}, y < y_{\text{min}}, y > y_{\text{max}})$$ Mit den Outcodes gilt nun:
  • Trivial Accept: Outcode($P_1$) $\lor$ Outcode($P_2$) = 0
  • Trivial Reject: Outcode($P_1$) $\land$ Outcode($P_2$) $\neq$ 0
Interessant ist, dass in den nicht-trivialen Fällen zwar immer ein Teil der Strecke außerhalb des Rechtecks liegt, aber nicht unbedingt auch ein Teil innerhalb des Rechtecks liegen muss.
$\alpha$-Clipping
Führe Window Edge Coordinates (WEC) ein. Diese sind ein vorzeichenbehafteter Abstand zu den Clipping-Kanten. Wenn eine Koordinate negativ ist, dann liegt der Punkt außerhalb des Rechtecks. Ich habe den Algorithmus in Python-Pseudocode geschrieben.
Sutherland-Hodgeman Polygon Clipping
Clipping wird Kante für Kante durchgeführt.

OpenGL

Slides: 07_ OpenGL (freiwilliges Bonusmaterial).pdf, 07_ OpenGL (Teil 1).pdf, 07_ OpenGL (Teil 2 und 3).pdf

GL
Short for "Graphics Library"
GLUT
OpenGL Utility Toolkit: Window manipulation, mouse and keyboard interactions.
Shading
  • Flat shading: \begin{align} n &= \langle x_1-x_2, x_3-x_2\rangle\\ f &= \langle n , L \rangle^+ \cdot (\lambda_1 c_1 + \lambda_2 c_2 + \lambda_3 c_3) \end{align}
  • Gouraud-Shading \begin{align} c'_i &= c_i \langle n_i, L \rangle^+\\ f &= \lambda_1 c'_1 + \lambda_2 c'_2 + \lambda_3 c'_3 \end{align}
  • Phong-Shading \begin{align} n &= \lambda_1 n_1 + \lambda_2 n_2 + \lambda_3 n_3\\ f &=\langle n , L \rangle^+ \cdot (\lambda_1 c_1 + \lambda_2 c_2 + \lambda_3 c_3) \end{align}
Gouraud Shading
Berechne Parameter wie z.B. Farbe an den Eckpunkten; interpoliere innerhalb des Polygons.
Phong Shading
Beleuchtungsberechnung mit interpolierter Normalen. Phong-Shading hat mit dem Phong-Beleuchtungsmodell inhaltlich nichts zu tun.
Backface Culling
Dreiecke, auf deren Rückseite man blickt werden üblicherweise nicht gezeichnet. (glEnable(GL_CULL_FACE); glCullFace(GL_BACK);)
Stencil-Puffer
Ein Stencil-Puffer ist eine Stanzmaske, welche für jeden Pixel im Framebuffer einen 8-bit Wert speichert. Im einfachsten Fall begrenzt der Stencil-Puffer das Renderinggebiet.

In order to use GLUT, you need to include:

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

OpenGL-Funktionen:

  • gluLookAt
  • glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT )

Keyword in Shadern:

  • in: Input-Variable
  • out: Output-Variable
  • uniform: Bei jedem Shader-Aufruf gleich (also insbesondere für jeden Vertex gleich); read-only; z.B. Transformationsmatrix
  • attribute: Attribut eines Vertex; nur für Vertex-Shader; z.B. Farbe oder Normale
  • varying: weitergegebene/interpolierte Werte (schreiben in einem Shader, lesen im darauffolgenden Shader)

In Vertex-Shadern:

gl_Position = P * V * M * vec4(position, 1.0);

Siehe auch:

  • GLProgramming.com
  • GL Specs
  • GLSL Specs

Übungsfolien: 08_ Shaders.pdf

Rasterisierungspipeline
  1. Geometrie-Verarbeitung
  2. Rasterisierung
  3. Pro-Fragment Operationen
Koordinatensystem-Pipeline
  • Objekt-Koordinaten
  • Welt-Koordinaten
  • Kamera-Koordinaten
  • Clip Space Koordianten
  • Normalisierte Geräte-Koordinaten
  • Bildschirm-Koordinaten
Vertex-Shader
Eingabe:
  • Position
  • Normale
  • Farbe oder Texturkoordinate
Ausgabe:
  • Weitergeleitete Vertex-Attribute
  • Position nach MVP-Transformation
Fragment-Shader
Eingabe:
  • Interpolierte Vertex-Attribute
  • Beleuchtungsinformationen
Ausgabe:
  • Farbe des Fragmentes
Shading
  • Flat Shading: Beleuchtungsberechnung pro Vertex (oder pro Fragment) mit Facetten-Normale
  • Gouraud-Shading: Beleuchtungsberechnung pro Vertex mit gemittelter Normale der anliegenden Facetten
  • Phong-Shading: Shading bzw. Beleuchtungsberechnung pro Fragment mit interpolierter Normale
  • Cube-Maps
  • Diffuse Vorfilterung
  • Texturzugriffe in GLSL

Prozedurale Modellierung, Content Creation

Slides: 08_ Prozedurale Modellierung, Content Creation.pdf am 19.01.2016

Rauschfunktion (Noise-Funktion)
Eine Funktion $$n: \mathbb{R}^n \rightarrow [a, b] \subsetneq \mathbb{R}$$ heißt Rauschfunktion, wenn gilt:
  • Periodenfrei: Eine Rauschfunktion darf keine sichtbare Periodizität aufweisen.
  • Räumliche Korrelation: $n(\mathbf{x}) \approx n(\mathbf{x} + \varepsilon)$
  • definierte Frequenzverteilung, bandlimitiert (Aliasing reduzieren)
Perlin-Rauschen (Perlin-Noise)
Zufallszahlen-Pool + Hash + Permutation
Oktave
Sammlung von Rauschfunktionen
Turbulenzfunktion
Eine Turbulenzfunktion summiert $k$ Ergebnisse (Oktave) mehrerer Rauschfunktionen auf: $$\text{turbulence}(x) = \sum_k \left (\frac{1}{2} \right )^k \cdot n (2^k \cdot x)$$ Einsatzgebiete:
  • Natürliche Oberflächen
  • Feuer
Pixelbasierte Textursynthese
Man hat ein kleines Beispiel (Exemplar) und erzeugt daraus - Pixel für Pixel - eine komplette Textur. Dieses Verfahren ist langsam.
Patchbasierte Textursynthese
Verwende bei der Texturgenerierung nicht nur einzelne Pixel aus dem Beispiel, sondern größere Patches.
Lindenmayer-System (L-System)
Ein Lindenmayer-System ist eine Grammatik $G = (V, \Sigma, \omega, P)$, wobei
  • $V \neq \emptyset$ das Alphabet ist,
  • $\Sigma \subseteq V$ die Menge der Konstanten ist,
  • $\omega \in V^*$ das Startwort ist,
  • $P \subseteq (V^* \setminus \Sigma^*) \times V^*$ die Menge der Ersetzungsregeln ist

Slides: 08_ Prozedurale Modellierung (freiwilliges Bonus Material).pdf

Turbulenz-Texturen
z.B. Diamon Square / Midpoint Displacement Algorithmus
  • Prozedurale Shader
  • Raymarching
  • Fraktale / Mandelbrot-Menge
  • L-Systeme / D0L-Systeme

Kurven und Flächen

Slides: 09_ Kurven und Flachen.pdf

Kubische Bézierkurven
Kubische Bézierkurven sind von der Form $$f(u) = (1-u)^3 b_0 + 3u (1-u)^2 b_1 + 3u^2 (1-u) b_2 + u^3 b_3$$ wobei $b_0, b_1, b_2 \in \mathbb{R}^n$ und $u \in [0, 1]$ gilt. Diese Faktoren (also $(1-u)^3, 3u (1-u)^2, 3u^2 (1-u), u^3$) werden auch Bernstein-Polynome genannt. Genau wie die Monome sind sie eine Basis für Polynome.
Bernstein-Polynome
$$B_i^n(u) = \binom{n}{i} u^i (1-u)^{n-i}$$
Béziersplines
Ein Bézierspline ist eine Liste von Bézierkurven.
$C^k$-stetige Splines
Es seien
\begin{align}F(u) &= \sum_{i=0}^n B_i^n(u) \mathbf{f}_i\\ G(u) &= \sum_{i=0}^n B_i^n(u) \mathbf{g}_i\end{align} Der Spline aus $F, G$ heißt
  • $C^0$ stetig $:\Leftrightarrow F(1) = G(0) \Leftrightarrow \mathbf{f}_n = \mathbf{g}_0$
  • $C^1$ stetig $:\Leftrightarrow F'(1) = G'(0) \land C^0 \Leftrightarrow \mathbf{f}_n - f_{n-1} = \mathbf{g}_1 - \mathbf{g}_0 \land C^0$
  • $C^2$ stetig $:\Leftrightarrow F''(1) = G''(0) \land C^1 \Leftrightarrow \mathbf{f}_{n-1} + (\mathbf{f}_{n-1} - \mathbf{f}_{n-2}) = \mathbf{g}_{1} + (\mathbf{g}_{1} - \mathbf{g}_{2}) \land C^1$
B-Splines
TODO
Algorithmus von De Casteljau
Siehe Code.

Übungen

Blatt 1

Das Framework bekommt man ohne VM unter Ubuntu 15.04 nach der Installtion folgender Pakete (vielleicht) zum laufen:

$ sudo apt-get install cmake xorg-dev libglu1-mesa-dev freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libglfw3

Wenn ihr den Fehler

error adding symbols: DSO missing from command line ubuntu

bekommt, dann solltet ihr einfach die obigen Pakete installieren, den build-Ordner löschen und es neu versuchen.

  • Color cube
  • Gravity field
  • Temperature of a black body

Außerdem:

$ pacman -Syy

ausführen. Dann bekommt man auch nicht mehr 404er wenn man mit

$ pacman -S vim

vim installieren will.

In der VM sollte unter Settings → System → Acceleration die Option "Enable VT-x/AMD-V" aktiviert sein. Zusätzlich sollte im BIOS des Host-Systems (also von eurem Rechner) die "Intel Virtualization Technology" aktiviert sein. (Man Laptop hat das nicht - bei mir funktionieren die Beispiele in der VM aber auch nicht :-/)

Blatt 6

  • glm::gtx::transform

Material und Links

  • Vorlesungswebsite
  • Übungswebsite
  • E-Mail Verteiler
  • Inoffizielle Musterlösungen für die Altklausuren

Siehe auch

  • World, View and Projection Transformation Matrices
  • How to calculate transformation matrix
  • Martin Thoma: Interactive Graphic Filters example
  • Interactive Blending example (OpenGL)
  • Martin Thoma: Minimal OpenGL example
  • Martin Thoma: alpha-cliping pythonic pseudocode
  • Minimal GLSL example
  • A Primer on Bézier Curves
  • StackExchange:
    • What is the worst case time complexity for intersection tests with BVHs?
    • Ray Tracing vs Rasterization
  • Íñigo Quílez: Raymarching Distance Fields

Software

  • OpenGL
    • OpenGL Tutorial 3 : Matrices
    • OpenGL Cheat Sheet
    • glBegin / 2
  • Terragen: Erzeugung von Landschaften
  • xfrog: Erzeugung von Pflanzen

Literatur

  • P. Shirley, S. Marschner: Fundamentals of Computer Graphics, 3rd Edition
    → Kapitel 3-9, Kapitel 11-12 (Data Structures for Graphics)

Übungsbetrieb

Es gibt Übungsblätter und Übungen, aber keine Tutorien und keine Bonuspunkte.

Um das Modul zu bestehen wird der Übungsschein benötigt. Für den Übungsschein benötigt man 60% der Punkte der Übungsblätter. Die Übungsblätter werden über submit.ivd.kit.edu eingereicht. Die Übungsblätter erscheinen alle 2 Wochen. Es gibt also min. 6 Übungsblätter und min. 120 Punkte. Die Deadline ist Montag, 11:00.

Termine und Klausurablauf

Datum: Mittwoch, der 09.03.2015 von 14:00 Uhr (Quelle: informatik.kit.edu)

  • 08.02.2016: Die Klausur-Anmeldung wird freigeschalten
  • 04.03.2016: Anmeldeschluss
  • 06.03.2016: Abmeldeschluss

Ort:

  • A... - Kon...: Benz-Hörsaal Geb. 10.21
  • Kop... - Stumpf...: Daimler-Hörsaal Geb. 10.21
  • Stumpp... - Z...: Redtenbacher Hörsaal Geb. 10.91, Raum 050

Punkte: 120
Zeit: 60 min
Punkteverteilung: ?
Bestehensgrenze: ?
Übungsschein: Gibt es. Dieser wird für das Modul, aber nicht für die Klausur benötigt. Mit mindestens 72 Punkten (60% von 120 Punkten) hat man den Übungsschein.
Bonuspunkte: Gibt es nicht.
Ergebnisse: ?
Einsicht: Noch nicht bekannt (Stand: 29.03.2016)
Erlaubte Hilfsmittel:

  • Stift
  • Geodreieck
  • Zirkel

Published

Okt 23, 2015
by Martin Thoma

Category

German posts

Tags

  • Klausur 34

Contact

  • Martin Thoma - A blog about Code, the Web and Cyberculture
  • E-mail subscription
  • RSS-Feed
  • Privacy/Datenschutzerklärung
  • Impressum
  • Powered by Pelican. Theme: Elegant by Talha Mansoor