Typische Fehler & Missverständnisse
Die klausurrelevanten Stolperfallen der Vorlesung an einem Ort: pro Punkt der falsche Reflex (Fehler) und die korrekte Fassung (Richtig), jeweils mit Link ins Kapitel.
Transformationen: Reihenfolge & Nicht-Kommutativität
-
Fehler: Die Matrizen einer Verkettung in Leserichtung anwenden und annehmen, die Reihenfolge sei egal. Richtig: Matrixmultiplikation ist nicht kommutativ (non-commutative). Die Kette wirkt von rechts nach links: die zuerst angewandte Transformation steht rechts (im Shader
projection * view * model * vertex,modelwirkt zuerst). (Kapitel 5: Transformationen, Kapitel 7: Kameras) -
Fehler: Die Elterntransformation im Szenegraph (scene graph) als erste (innerste) anwenden. Richtig: Der Szenegraph wird von unten (Blatt) nach oben (Wurzel) ausgewertet; die Elterntransformation wirkt als letzte (aeusserste). (Kapitel 5: Transformationen)
Transformationen: Skalierung & Rotation um den Ursprung
- Fehler: Annehmen, Skalierung (scaling) und Rotation wirkten am Ort des Objekts. Richtig: Beide beziehen sich auf den Ursprung (origin). Ein nicht im Ursprung liegendes Objekt verschiebt sich beim Skalieren/Drehen ungewollt mit. Wer um einen anderen Referenzpunkt drehen/skalieren will, muss vorher dorthin translatieren (und danach zurueck). (Kapitel 5: Transformationen, Kapitel 2: Grafische Objekte)
Transformationen: Vorzeichen in der Rotationsmatrix
- Fehler: Falsches -Vorzeichen in der Rotationsmatrix, besonders bei . Richtig: Auf die Vorzeichenstellung achten. hat gegenueber und die "gespiegelte" Anordnung der -Terme:
Homogene Koordinaten & Homogenisierung
-
Fehler: Die Homogenisierung (homogenization / perspective divide), also die Division durch , vergessen oder nicht ausschliessen. Richtig: Nach der Vertex-Stufe wird durch geteilt; erst dadurch entsteht die perspektivische Verkleinerung. ist auszuschliessen (Division). (Kapitel 5: Transformationen, Kapitel 7: Kameras)
-
Fehler: Beim Hochladen eines Punktes in den Shader vergessen bzw. versehentlich setzen. Richtig: Punkte als
vec4(vertex, 1.0)uebergeben (), nicht (das waere eine Richtung, kein Punkt). (Kapitel 6: Shaderprogrammierung)
Beleuchtung nach Phong: Winkel und
-
Fehler: Die Winkel und vertauschen oder den Glanz-Exponenten (shininess) auf den diffusen Term anwenden. Richtig: ist der Winkel zwischen Normale und Lichtvektor (diffus, Lambert): . ist der Winkel zwischen Reflexionsvektor und Blickvektor (spekular): . Der Exponent gehoert nur zur spekularen Reflexion (grosses = kleiner, harter Glanzpunkt). (Kapitel 9: Visualisierungstechniken)
-
Fehler: Phong'sches Reflexionsmodell (reflection model) und Phong-Shading gleichsetzen. Richtig: Das Reflexionsmodell sagt was berechnet wird (ambient + diffus + spekular), das Shading wo/wie oft (pro Flaeche / pro Vertex / pro Pixel). (Kapitel 9: Visualisierungstechniken)
-
Fehler: Negatives zulassen ("Licht" von der Rueckseite). Richtig: Im Shader mit
max(0.0, dot(N,L))abschneiden. (Kapitel 9: Visualisierungstechniken)
Farbraeume & HSV: der V-Kanal
-
Fehler: Den HSV-Wert als Mittelwert der Kanaele auffassen oder mit einem der bunten RGB-Kanaele verwechseln. Richtig: (nicht der Mittelwert); die Saettigung (saturation) nutzt das max-min-Verhaeltnis. Bei voll gesaettigten Farben ist fast ueberall 1, es "verschwindet" nur die schwarze Mitte. (Kapitel 10: Farbraeume)
-
Fehler: Bei der Kanalzerlegung (channel decomposition) die Leserichtung des Grauwerts vertauschen. Richtig: Weiss = hoher Wert (max), Schwarz = niedriger Wert (min). In HSV hat Weiss (weiss), (schwarz) und undefiniertes (als 0/schwarz dargestellt). (Kapitel 10: Farbraeume)
Punktoperatoren: Grauwerttransformation & Kontrast
-
Fehler: Bei der linearen Grauwerttransformation nicht erkennen, ob der Kontrast (contrast) steigt oder faellt. Richtig: Der Faktor
multentscheidet: spreizt den Wertebereich (kontrastreicher, Kammform mit Luecken im Histogramm), staucht ihn (kontrastaermer). Beispiel: ergibt (mehr Kontrast), ergibt (weniger Kontrast). (Kapitel 11: Bildbearbeitung - Punktoperatoren) -
Fehler: Den Achsenabschnitt
addfrei raten oder das Clipping vergessen. Richtig:multaus den Intervallbreiten bestimmen, dann einen bekannten Punkt einsetzen und nachaddaufloesen. Werte ausserhalb auf 0 bzw. 255 klemmen. (Kapitel 11: Bildbearbeitung - Punktoperatoren)
Lokale Operatoren: Mittelwert vs. Median
-
Fehler: Annehmen, Mittelwert- und Medianoperator seien austauschbar. Richtig: Der Mittelwertoperator (mean filter, lineare Faltung) bildet einen gewichteten Durchschnitt und kann dadurch neue, im Original nicht vorhandene Grauwerte erzeugen; er ist ausreisserempfindlich. Der Median (Rangordnungsoperator, nichtlinear) waehlt den mittleren Wert der sortierten Nachbarschaft, erzeugt keine neuen Grauwerte, erhaelt Kanten besser und entfernt Salz-und-Pfeffer-Rauschen wirksamer. (Kapitel 12: Bildverarbeitung - Lokale Operatoren)
-
Fehler: Faltungskernel mit gerader Kantenlaenge verwenden. Richtig: Kernelgroesse muss ungerade sein (3x3, 5x5, ...), damit es ein eindeutiges Zentrum ohne Halbpixel-Versatz gibt. (Kapitel 12: Bildverarbeitung - Lokale Operatoren)
Segmentierung: N4- vs. N8-Nachbarschaft
- Fehler: N4- und N8-Nachbarschaft (4-/8-neighborhood) verwechseln oder fuer Vorder- und Hintergrund dieselbe Nachbarschaft verwenden. Richtig: N4 zaehlt nur die 4 direkten Nachbarn (oben/unten/links/rechts): diagonal beruehrende Pixel sind getrennt, es entstehen mehr Zusammenhangskomponenten (ZHK / connected components). N8 zaehlt zusaetzlich die 4 Diagonalnachbarn: diagonale Ketten verschmelzen, es entstehen gleich viele oder weniger ZHKs. Fuer Vorder- und Hintergrund die entgegengesetzte Nachbarschaft waehlen. (Kapitel 12: Bildverarbeitung - Lokale Operatoren)
Texturierung: Texture Unit vs. Textur-ID
-
Fehler: Bei
glUniform1idie Textur-ID statt der Texture Unit uebergeben (haeufigste Fehlerquelle). Richtig: Der Sampler-Uniform bekommt die Nummer der Texture Unit (0, 1, 2, ...), an die die Textur gebunden ist, nicht die von OpenGL vergebene Textur-ID (das Handle desglGenTextures-Objekts). (Kapitel 9b: Texturierung) -
Fehler: Texel (texture element) und Pixel (Ausgabebild) gleichsetzen oder Texturkoordinaten mit statt notieren. Richtig: Ein Texel ist ein Element der Textur, ein Pixel ein Element des Ausgabebilds; Texturkoordinaten laufen normiert als . (Kapitel 9b: Texturierung)