Last-Minute-Wiederholung

30 Minuten vor der Klausur. Nur die absoluten Must-knows, ein letzter Skim.

Transformationen (transformations)

  • Punkt als Spaltenvektor, homogene Koordinate w=1w=1; Verkettung ist NICHT kommutativ.
  • Zuerst angewandte Transformation steht RECHTS: M=TRSM = T\cdot R\cdot S skaliert zuerst.
  • Um Referenzpunkt p\vec{p}: M=T(+p)RT(p)M = T(+\vec{p})\cdot R\cdot T(-\vec{p}) (hin, drehen, zurueck).
  • Perspective divide (Homogenisierung): (X,Y,Z,W)(X/W,Y/W,Z/W)(X,Y,Z,W)\to(X/W,Y/W,Z/W), W0W\neq0.
  • Trap: Szenegraph von Wurzel zum Blatt, Wurzel-Transformation steht links.

Kamera & Projektion (camera & projection)

  • View-Matrix: V=RKameraT(c)V = R_{Kamera}\cdot T(-\vec{c}) (erst Translation um -Position, dann Rotation).
  • Strahlensatz auf near-Ebene nn: py=npypzp'_y = \dfrac{n\cdot p_y}{p_z} (analog xx).
  • Volle Kette: p=MProjVMModelpp' = M_{Proj}\cdot V\cdot M_{Model}\cdot p; NDC-Wuerfel ist [1,1]3[-1,1]^3.
  • gluLookAt(eye, center, up); glm::perspective(fovy, aspect, zNear, zFar).
  • Trap: die volle Projektionsmatrix ist NICHT klausurrelevant.

Rendering-Pipeline & Interpolation

  • Raeume: Local \to World \to Camera \to Clip \to NDC \to Fenster (Model, View, Proj, Homog., Viewport).
  • Lineare Interpolation (edge): F(t)=(1t)F(0)+tF(1)F(t) = (1-t)F(0) + t\,F(1).
  • Baryzentrisch (triangle): wi=Ai/Agesw_i = A_i/A_{ges}, w1+w2+w3=1w_1+w_2+w_3=1.
  • Dreiecksflaeche: A=12x1(y2y3)+x2(y3y1)+x3(y1y2)A=\tfrac12\,|x_1(y_2-y_3)+x_2(y_3-y_1)+x_3(y_1-y_2)|.
  • Tiefentest: glEnable(GL_DEPTH_TEST), glDepthFunc(GL_LESS) -> kleineres z gewinnt.

Shader (GLSL)

  • Pipeline: Vertex \to (Tesselation, Geometry: optional) \to Fragment; dazwischen fixe Stufen.
  • Vertex Shader: finale Position gl_Position pro Vertex (Pflicht).
  • Fragment Shader: Farbe pro Pixel/Fragment (Pflicht).
  • Qualifizierer: in / out / uniform; out wird zum Fragment-Shader automatisch interpoliert.
  • Uniform: per Name adressiert, pro Draw-Call konstant.

Beleuchtung nach Phong (Phong illumination)

  • Lo=MaLa+MdLicosα+MsLicoskβ+MeL_o = M_a L_a + M_d L_i\cos\alpha + M_s L_i\cos^{k}\beta + M_e (ambient, diffus, spekular, emission).
  • Diffus (Lambert): cosα=max(0,NL)\cos\alpha = \max(0,\vec N\cdot\vec L).
  • Spekular: coskβ=max(0,RV)k\cos^{k}\beta = \max(0,\vec R\cdot\vec V)^{k}; grosses kk = kleiner, harter Glanzpunkt.
  • Shading-Granularitaet: Flat (Flaeche) < Gouraud (Ecken) < Phong (Pixel/Fragment).
  • Alle Vektoren N,L,R,V\vec N,\vec L,\vec R,\vec V normiert.

Farbraeume (color spaces)

  • RGB additiv, CMY subtraktiv: CMY=1RGB\text{CMY}=1-\text{RGB}.
  • HSV: V=max(R,G,B)V=\max(R,G,B), S=maxminmaxS=\dfrac{\max-\min}{\max} (0 falls max=0\max=0), HH = Winkel (00^\circ Rot, 120120^\circ Gruen, 240240^\circ Blau).
  • Luma-Gewichtung ca. 0,3R+0,6G+0,1B0{,}3R + 0{,}6G + 0{,}1B (Gruen dominiert).
  • Trap: YCbCr-Koeffizienten sind NICHT klausurrelevant.

Punktoperatoren (point operators)

  • Lineare Grauwerttransformation: g(i,j)=e(i,j)mult+addg'(i,j) = e(i,j)\cdot\text{mult} + \text{add}.
  • Kontrastspreizung: mult=gmaxgminemaxemin\text{mult}=\dfrac{g'_{max}-g'_{min}}{e_{max}-e_{min}}, dann add=gminmultemin\text{add}=g'_{min}-\text{mult}\cdot e_{min}.
  • mult>1\text{mult}>1 kontrastreicher (Luecken im Histogramm), mult<1\text{mult}<1 kontrastaermer.
  • Inversion: g=gmaxgg'=g_{max}-g; Gamma: g=gmax(g/gmax)1/γg'=g_{max}(g/g_{max})^{1/\gamma}.

Lokale Operatoren (local operators)

  • Faltung (convolution): g(i,j)=u,vK(u,v)g(i+u,j+v)g'(i,j)=\sum_{u,v} K(u,v)\cdot g(i+u,j+v); Kern ungerade (eindeutiges Zentrum).
  • Gauss 116(1,2,1;2,4,2;1,2,1)\tfrac{1}{16}(1,2,1;2,4,2;1,2,1) glaettet; Laplace (0,1,0;1,4,1;0,1,0)(0,-1,0;-1,4,-1;0,-1,0) und Sobel detektieren Kanten.
  • Median: nichtlinear, erhaelt Kanten, entfernt Ausreisser, erzeugt keine neuen Grauwerte.
  • ZHK: N4 (4 Nachbarn) vs N8 (mit Diagonalen); N8 ergibt gleich viele oder WENIGER Komponenten.

Tief durchatmen. Du kennst das alles schon. Viel Erfolg!