Übungen: Kameras & Projektion
Aufgaben zum Kamera-Modell der Computergrafik: NDC, extrinsische Parameter (View-Matrix via lookAt), intrinsische Parameter (orthografisch vs. perspektivisch), Strahlensatz (intercept theorem), View-Frustum und die komplette Transformationskette (transformation chain). Die Aufgaben sind nach Schwierigkeit gestaffelt. Rechne die Zahlenbeispiele selbst, bevor du die Lösung aufklappst. Passend zu Kapitel 7: Kameras.
Beginner
Aufgabe 1 (Beginner) - NDC-Wertebereich
Was ist der Normalized Device Space (NDC), und welchen Wertebereich hat er? Warum ist er für das Kamera-Modell zentral?
Lösung anzeigen
Der Normalized Device Space (normalized device space) ist der normierte Zielraum, in dem die GPU letztlich rendert. Er ist ein Würfel:
Nur Vertices innerhalb dieses Würfels werden gerendert. Er ist zentral, weil die GPU nur diesen festen Bereich kennt. Die Aufgabe der Kamera-Transformationen besteht genau darin, eine frei platzierte Kamera und ihr Sichtvolumen so abzubilden, dass die sichtbare Geometrie in diesem -Würfel landet.
Tipp: Merke dir die Kette der Zielräume: Camera Space (Kameraraum) -> Projektion -> NDC-Würfel. Die Projektion "streckt" das Sichtvolumen auf den Würfel.
Siehe Kapitel 7: Kameras, Abschnitt "Normalized Device Space (NDC)".
Aufgabe 2 (Beginner) - Die 9 lookAt-Skalare
Die Funktion lookAt erzeugt die View-Matrix aus 9 Skalaren. Ordne die folgenden 9 Werte den drei extrinsischen Parametern zu und benenne jeden:
lookAt( cx, cy, cz, // ?
ax, ay, az, // ?
ux, uy, uz ); // ?
Lösung anzeigen
Die drei extrinsischen Kameraparameter (extrinsic camera parameters) sind jeweils ein 3D-Vektor, zusammen also 9 Skalare:
cx, cy, cz= Kamerazentrum c (camera center): die Position der Kamera.ax, ay, az= Betrachtungspunkt a (look-at point / target): das Blickziel.ux, uy, uz= up-Vektor u (up vector): legt die Oben-Richtung fest, also die Rotation um die Blickachse (Roll).
Diese drei Größen werden durch die View-Matrix V integriert.
Typischer Fehler: Den up-Vektor weglassen oder für beliebig halten. Ohne korrekten up-Vektor ist die Ausrichtung um die Blickachse unterbestimmt - die Kamera kann beliebig "verrollt" sein.
Siehe Kapitel 7: Kameras, Abschnitte "Äußere (extrinsische) Kameraparameter" und "lookAt".
Aufgabe 3 (Beginner) - Strahlensatz: einfache Projektion
Ein Punkt hat die Höhe und liegt in der Tiefe . Die Bildebene (image plane) liegt im Abstand vor der Kamera. Berechne die projizierte Höhe .
Lösung anzeigen
Grundlage ist der Strahlensatz (intercept theorem / similar triangles). Aus ähnlichen Dreiecken folgt:
Einsetzen der Zahlen:
Die projizierte Höhe ist also .
Tipp: Die Division durch ist der Kern der perspektivischen Verkleinerung: bei fester Höhe wird die Projektion kleiner, je größer die Tiefe wird. Für gilt analog .
Siehe Kapitel 7: Kameras, Abschnitt "Herleitung über den Strahlensatz".
Fortgeschritten
Aufgabe 4 (Fortgeschritten) - Orthografisch vs. perspektivisch
Vergleiche die orthografische (Parallel-) Projektion mit der perspektivischen Projektion. Gehe auf drei Aspekte ein: Verlauf der Projektionsstrahlen, Form des Rendervolumens und die Größenwahrnehmung mit der Entfernung.
Lösung anzeigen
| Aspekt | Orthografisch (parallel) | Perspektivisch |
|---|---|---|
| Projektionsstrahlen | verlaufen parallel | treffen sich in einem Fluchtpunkt (vanishing point) |
| Rendervolumen | Quader zwischen und | Pyramidenstumpf / Frustum |
| Größe mit Entfernung | keine Verkleinerung, Größe bleibt konstant | Objekte erscheinen kleiner, je weiter hinten sie liegen |
- Orthografisch: Es gibt keine perspektivische Verkleinerung. Definiert wird ein quaderförmiges Volumen, das in den NDC-Würfel transformiert wird (
glOrtho). Nützlich z. B. für technische Ansichten oder 2D. - Perspektivisch: Die "natürliche Darstellung", basiert auf dem Lochkamera-Modell (pinhole camera) und dem Strahlensatz. Das Sichtvolumen ist ein Frustum (
glm::frustum/glm::perspective).
Tipp: Merksatz Perspektive - "je weiter hinten, desto kleiner". Wird diese Regel gebrochen, entsteht eine fehlerhafte Größeninformation (optische Täuschung).
Siehe Kapitel 7: Kameras, Abschnitte "Orthografische (Parallel-) Projektion" und "Perspektivische Wahrnehmung".
Aufgabe 5 (Fortgeschritten) - Strahlensatz für x und y, plus Verkleinerung
Die Bildebene liegt im Abstand . Ein Punkt hat , , .
a) Berechne und . b) Ein zweiter Punkt hat dieselbe Höhe , liegt aber in doppelter Tiefe . Berechne dessen und interpretiere den Vergleich.
Lösung anzeigen
a) Mit und :
b) Gleiche Höhe , aber :
Interpretation: Die Tiefe hat sich von auf verdoppelt, die projizierte Höhe hat sich von auf halbiert. Bei fester realer Höhe ist die projizierte Größe umgekehrt proportional zur Tiefe - das ist die perspektivische Verkleinerung.
Typischer Fehler: Vergessen, dass nur ein gemeinsamer Skalierungsfaktor ist. Das Größenverhältnis zwischen zwei Punkten hängt allein vom Verhältnis ihrer -Werte ab (hier Faktor -> Faktor ).
Siehe Kapitel 7: Kameras, Abschnitt "Herleitung über den Strahlensatz".
Aufgabe 6 (Fortgeschritten) - glm::frustum vs. glm::perspective
Welche Aussage(n) zu den beiden Frustum-Definitionen sind korrekt? (Mehrfachauswahl möglich)
glm::frustum(float left, float right, float top, float bottom, float near, float far);
glm::perspective(float theta, float aspect, float near, float far);
glm::perspectivekann nur symmetrische Frusta erzeugen.glm::frustumkann auch asymmetrische Frusta erzeugen.- Bei
glm::perspectiveistthetader vertikale Öffnungswinkel (field of view). glm::perspectivebenötigt keine near/far-Ebenen.
Lösung anzeigen
Korrekt: 1, 2 und 3. Aussage 4 ist falsch.
- (1) richtig:
glm::perspectiveerzeugt nur symmetrische Frusta. Für asymmetrische Frusta braucht manglm::frustum. - (2) richtig:
glm::frustumerlaubt über left, right, top, bottom auch asymmetrische Frusta. - (3) richtig:
thetaist der vertikale Öffnungswinkel (opening angle / field of view),aspectist das Seitenverhältnis (aspect ratio). - (4) falsch: Beide Funktionen benötigen
nearundfar. Erst die Clipping-Ebenen (near-plane, far-plane) machen die Projektion als Matrixmultiplikation möglich.
Typischer Fehler: Die Parameter-Reihenfolge von
glm::frustumist left, right, TOP, BOTTOM, near, far -topsteht vorbottom, abweichend vonglOrtho, dasbottomvortophat. Reihenfolge nicht durcheinanderbringen.
Siehe Kapitel 7: Kameras, Abschnitte "View-Frustum und Clipping-Ebenen" und "Frustum-Definition".
Anspruchsvoll
Aufgabe 7 (Anspruchsvoll) - Die Transformationskette und ihre Reihenfolge
Gegeben die kompakte Transformationskette
a) In welcher Reihenfolge wirken die Matrizen auf einen Vertex, und warum? b) Wie sieht die entsprechende Zeile im Vertex-Shader aus, und welcher Fallstrick lauert bei der Schreibreihenfolge?
Lösung anzeigen
a) Die Matrizen wirken von rechts nach links auf den Vertex :
- Zuerst : platziert den Vertex in der Welt (akkumulierte Translation, Skalierung, Rotation).
- Dann (View-Matrix): bringt die Welt in den Camera Space (Kameraraum), Kamera im Ursprung, Blick entlang .
- Zuletzt : bildet das Sichtvolumen auf den NDC-Würfel ab ( oder ).
Grund: Matrixmultiplikation ist assoziativ, aber die auf den Vektor zuletzt angewandte Matrix steht ganz links.
b) Im GLSL-Vertex-Shader:
gl_Position = projection * view * model * vec4(vertex, 1.0);
Fallstrick: projection steht links (wird zuerst geschrieben), wirkt aber zuletzt; model steht rechts, wirkt zuerst. Die Schreibreihenfolge ist die Umkehrung der Wirkungsreihenfolge.
Typischer Fehler: Reihenfolge vertauschen (z. B.
model * view * projection). Matrixmultiplikation ist nicht kommutativ - eine falsche Reihenfolge liefert falsche Ergebnisse.
Tipp: Der Shader-Output ist die Position in homogenen Koordinaten (homogeneous coordinates), also vor der perspektivischen Division. Die Homogenisierung (Division durch ) erfolgt erst nach dem Vertex-Shader.
Siehe Kapitel 7: Kameras, Abschnitte "Die komplette Transformationskette" und "Umsetzung im Vertex-Shader".
Aufgabe 8 (Anspruchsvoll) - Aufbau der View-Matrix und z-Negation
a) Aus welchen zwei Teil-Matrizen setzt sich die View-Matrix zusammen, und was stehen in den Zeilen der Rotationsmatrix? b) Warum ist zusätzlich eine Negation der z-Koordinate () nötig?
Lösung anzeigen
a) Die View-Matrix ist das Produkt aus Rotationsmatrix und Translationsmatrix:
- Die Rotationsmatrix enthält als Zeilen die drei Kamera-Achsen, jeweils ausgedrückt in Weltkoordinaten: x-Achse (rot), y-Achse (grün), z-Achse (blau/türkis).
- Die Translationsmatrix verschiebt um , also das negative Kamerazentrum, so dass die Kamera in den Ursprung wandert.
Zugrunde liegt ein rechtshändiges Koordinatensystem; das Ergebnis ist der View Space / Camera Space, in dem die Kamera im Ursprung liegt und entlang blickt.
b) Der Camera Space ist rechtshändig (Kamera blickt entlang ), der NDC ist linkshändig (positive z-Werte als Entfernung). Um zwischen den Systemen zu wechseln, multipliziert die z-Werte mit :
Diese Invertierung ist in den gl-Methoden bereits integriert.
Typischer Fehler: Annehmen, die Kamera blicke im View Space entlang . Sie blickt entlang (rechtshändig); erst die z-Negation stellt die Konsistenz mit dem linkshändigen NDC her.
Siehe Kapitel 7: Kameras, Abschnitte "View Transformation und View-Matrix" sowie "Negation der z-Koordinate".
Klausur-Niveau
Aufgabe 9 (Klausur-Niveau) - Gemischte Multiple-Choice
Kreuze für jede Aussage an, ob sie wahr oder falsch ist:
- Der NDC ist der Würfel .
- Die extrinsischen Parameter legen fest, welcher Bereich der Szene gerendert wird.
- Bei der orthografischen Projektion gibt es keine perspektivische Verkleinerung.
- Im Vertex-Shader wird die perspektivische Division bereits durchgeführt.
- Der up-Vektor bestimmt die Rotation um die Blickachse.
Lösung anzeigen
- Wahr. .
- Falsch. Das ist die Aufgabe der intrinsischen Parameter (Projektion). Die extrinsischen Parameter beschreiben Position und Ausrichtung der Kamera (View-Matrix).
- Wahr. Orthografisch: parallele Strahlen, keine Verkleinerung mit der Entfernung.
- Falsch. Der Shader gibt die Position in homogenen Koordinaten vor der Division aus. Die perspektivische Division (Homogenisierung durch ) erfolgt nach dem Vertex-Shader.
- Wahr. Der up-Vektor legt die Oben-Richtung und damit die Rotation um die Blickachse (Roll) fest.
Typischer Fehler: intrinsisch und extrinsisch vertauschen. Merkhilfe - extrinsisch = externe Lage (wo/wie steht die Kamera); intrinsisch = innere Optik (welcher Ausschnitt / Öffnungswinkel).
Siehe Kapitel 7: Kameras, Abschnitt "Prüfungsrelevanz".
Aufgabe 10 (Klausur-Niveau) - Kombinierte Aufgabe
Eine Szene wird perspektivisch dargestellt. Die Bildebene (near-plane) liegt im Abstand .
a) Ein Objektpunkt hat in Tiefe . Berechne . b) Ein identischer Punkt derselben Höhe liegt in Tiefe . Berechne und erkläre den Größenunterschied. c) Nenne die vollständige (kompakte) Transformationskette, die diesen Punkt bis in den NDC bringt, und benenne die drei Raumstufen der Pipeline.
Lösung anzeigen
a) Strahlensatz :
b) Bei doppelter Tiefe :
Die Tiefe hat sich verdoppelt, die projizierte Höhe halbiert sich von auf . Das ist die perspektivische Verkleinerung: die Division durch macht entferntere Objekte kleiner.
c) Kompakte Transformationskette:
Wirkung von rechts nach links: platziert in der Welt, bringt in den Camera Space, bildet auf den NDC ab. Die drei Raumstufen der Pipeline:
- Camera View - das finale gerenderte Bild.
- Camera Space (Kameraraum) - Objekte im Frustum.
- Normalized Device Space - Objekte im NDC-Würfel, durch die Projektion "gestreckt".
Hinweis: Die vollständige perspektivische Projektionsmatrix selbst ist laut Kapitel ausdrücklich nicht klausurrelevant. Für diese Aufgabe genügt der Strahlensatz (konzeptionell relevant) plus die Kenntnis von Kette und Raumstufen; die 4x4-Matrix muss nicht hergeleitet werden.
Tipp: Auch ohne die Matrix solltest du ihre Wirkung kennen: werden perspektivisch skaliert, wird nichtlinear skaliert (mehr Tiefenpräzision für nahe Objekte). Eine sehr ferne far-Ebene bei sehr naher near-Ebene führt zu Präzisionsverlust in der Ferne (z-fighting).
Siehe Kapitel 7: Kameras, Abschnitte "Herleitung über den Strahlensatz", "Die komplette Transformationskette" und "Perspektivische Division und Tiefenpräzision".