Answer to Question 1


a) Auf dem Monitor A' k\u00f6nnen die Farben kr\u00e4ftiger wirken.

b) Die Chromazit\u00e4tswerte, die mit Hilfe des zu A' geh\u00f6rigen Monitors korrekt gedruckt werden k\u00f6nnen, sind die Werte, die im XYZ-Farbraum zu den RGB-Werten des Monitors A' führen.

c) Der Tristimuluswert t = (X, Y, Z) = (0.5, 0.3, 0.2) im XYZ-Farbraum entspricht der Farbe c. Die Chromazit\u00e4tswerte sind die Werte, die im XYZ-Farbraum zu den RGB-Werten des Monitors A' führen.

d) Der Rand des Chromatizit\u00e4tsdiagramms repr\u00e4sentiert die Grenzwerte der RGB-Farbraum.

e) Die vollgesättigte Farbvalenz zur Farbe c kann mit Hilfe des Wei\u00dfpunkts w berechnet werden. Die Werte im XYZ-Farbraum entsprechen den RGB-Wert des Monitors A'. 





****************************************************************************************
****************************************************************************************




Answer to Question 2


a) Die Transportpfade (1) bis (4) können durch Whitted-Style Raytracing erzeugt werden, da sie die Kamera und das Licht verbinden.

b) Das Bild der Kamera zeigt die Primärestrahlung (r_1), die durch die Lochkamera beobachtet wird. Die Strahlen (r_2), (r_3) und (r_4) zeigen, an welcher Position die Primärestrahlung die Bildebene schneidet. Das Bild wird nun mittels Whitted-Style Raytracing berechnet. Das daraus resultierende Bild der Kamera zeigt die Bildebene in Bereiche gleicher Farbe unterteilt und diese Bereiche mit ihrer jeweiligen Farbe beschrieben.

Die Bereiche mit der roten Farbe sind diejenigen, an denen die rote Wand im Vakuum liegt. Die Bereiche mit der grünen Farbe sind diejenigen, an denen der grüne Boden im Vakuum liegt. Die Bereiche mit der weißen Farbe sind diejenigen, an denen der Glasblock im Vakuum liegt. Die Bereiche mit der blauen Farbe sind diejenigen, an denen die Lichtquelle im Vakuum liegt. 





****************************************************************************************
****************************************************************************************




Answer to Question 3


a) Die Abbildung (a) zeigt die Komponente des Phong-Beleuchtungsmodells, die die Lichtstreuung (Specular) darstellt.

b) Die Variation der Lichtstreuung (Specular) in den Abbildungen (c) und (d) wird durch den Winkel zwischen der Lichtrichtung und der Oberflächennormale verursacht. In Abbildung (c) ist der Winkel größer, was zu einer stärkeren Lichtstreuung führt. In Abbildung (d) ist der Winkel kleiner, was zu einer schwächeren Lichtstreuung führt.

c) Wenn Gouraud Shading verwendet wird, wird das Beleuchtungsmodell ausgewertet, wenn es auf die Oberfläche der Gouraud-Shading-Methode angewendet wird. Wenn Phong Shading verwendet wird, wird das Beleuchtungsmodell ausgewertet, wenn es auf die Oberfläche der Phong-Shading-Methode angewendet wird. In der Abbildung (c) wird das Beleuchtungsmodell auf die Oberfläche der Gouraud-Shading-Methode angewendet, was zu einer stärkeren Lichtstreuung führt. In der Abbildung (d) wird das Beleuchtungsmodell auf die Oberfläche der Phong-Shading-Methode angewendet, was zu einer schwächeren Lichtstreuung führt. 





****************************************************************************************
****************************************************************************************




Answer to Question 4


a) Die H\u00fcllk\u00f6rper-Hierarchie wird in der Reihenfolge A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O,





****************************************************************************************
****************************************************************************************




Answer to Question 5


a) Die affine Transformation M kann aus den Matrizen A bis F gebildet werden, indem man die Matrizen A bis F in der Reihenfolge A, B, C, F, E, D multipliziert. Die Matrizen A bis F sind in der Abbildung "figures/transformations.png" dargestellt.

b) Das Objekt wird durch die Matrizen F, C und B schrittweise transformiert. Die Matrizen F, C und B sind in der Abbildung "figures/transformation_second.png" dargestellt.

c) Die Normalen von o werden bei der Transformation mit der Matrix T richtig transformiert, wenn die Normalen von o in der Basis der Matrix T liegen. Wenn die Normalen von o in der Basis der Matrix T liegen, werden sie durch die Matrix T transformiert. Wenn die Normalen von o nicht in der Basis der Matrix T liegen, werden sie durch die Matrix T nicht korrekt transformiert. Normalen können durch die Matrix T korrekt transformiert werden, wenn sie in der Basis der Matrix T liegen und die Matrix T invertierbar ist. 





****************************************************************************************
****************************************************************************************




Answer to Question 6


a) Zwei Alternativen zu bilinearer Interpolation bei Texturen sind:

1. Nearest Neighbor Interpolation: Hier wird die Textur auf der Basis der nächstgelegenen Pixel berechnet.
2. Bilinear Interpolation: Hier wird die Textur auf der Basis der vier nächstgelegenen Pixel berechnet.

b) Die Interpolationsgewichte für die Stelle (x, y) sind:

1. wi = 0.5
2. wj = 0.4

c) Die beiden Probleme, die auftreten können, wenn die Aufl\u00f6sungsstufe bei Mip-Mapping einer Textur nicht idealerweise gewählt wird, sind:

1. Aliasing: Hier entstehen Fehler, die durch die Aufl\u00f6sung von Texturen verursacht werden.
2. Texturqualität: Hier entstehen Fehler, die durch die Aufl\u00f6sung von Texturen verursacht werden.

d) Es ist akzeptabel, die Stufen jeweils in halbierter Aufl\u00f6sung zu speichern, da dies die Texturqualität erhöht und die Speicherplatzverwendung reduziert.

e) Ein Strahl schneidet die von v_1 , v_2 , v_3 aufgespannte Ebene im Punkt x. Die baryzentrischen Koordinaten \u03bb_1 = 0.5 und \u03bb_2 = 0.4 bez\u00fcglich der Eckpunkte des Dreiecks v_1 , v_2 , v_3 berechnet. Es ist klar, dass ein Schnittpunkt des Strahls mit dem Dreieck vorliegt.

f) Ein Strahl schneidet die von v_1 , v_2 , v_3 aufgespannte Ebene im Punkt x. F\u00fcr x wurden die baryzentrischen Koordinaten \u03bb_1 = 0.5 und \u03bb_2 = 0.4 bez\u00fcglich der Eckpunkte des Dreiecks v_1 , v_2 , v_3 berechnet. Wir betrachten nun den Punkt x' = x + 1/2 (v_2 - v_1). Die baryzentrischen Koordinaten \u03bb'_1 , \u03bb'_2 , \u03bb'_3 von x' sind:

1. \u03bb'_1 = 0.5
2. \u03bb'_2 = 0.4
3. \u03bb'_3 = 0.1 





****************************************************************************************
****************************************************************************************




Answer to Question 7


a) Die Pipeline-Stufen arbeiten mit Eingabedaten, die aus einer Primitive Assembly-Stufe stammen. Die Ausgabedaten sind jeweils vertikal gestapelt und enthalten eine Anzahl von Eingabeelementen, die von 0 bis 1 oder von 1 bis N variieren kann.

b) Die Pipeline muss bis zur Primitive Assembly-Stufe durchlaufen werden, bevor entschieden werden kann, ob ein Teil der Eingabeelemente durch OpenGL Backface-Culling verworfen werden kann, da die Primitive Assembly-Stufe die Eingabeelemente in die richtige Reihenfolge bringt, die für die Backface-Culling-Entscheidung erforderlich ist.

c) Im Geometry Shader können jeweils zwei Dreiecke pro Partikel erzeugt werden, indem man die Positionen der Partikel in die Geometrie-Datenbank schreibt und diese dann in der Geometrie-Datenbank auf die Textur abgebildet.

d) Eine alternative Möglichkeit besteht darin, die Positionen der Partikel in der Primitive Assembly-Stufe zu speichern und diese dann im Geometry Shader zu verwenden, um die beiden Dreiecke pro Partikel zu erstellen.

e) Um die Bereiche in der Textur, die nicht gezeichnet werden sollen, zu entfernen, ohne Blending zu benutzen, kann man die Positionen der Partikel in der Primitive Assembly-Stufe verwenden, um die Bereiche in der Textur zu identifizieren und diese dann im Geometry Shader auszuschließen. 





****************************************************************************************
****************************************************************************************




Answer to Question 8


a) Die Blending-Operation findet in der OpenGL-Pipeline an der Stelle, an der die Farbwerte aus dem Fragment Shader und dem Framebuffer kombiniert werden.

b) Die Blending-Operation erzeugt die Kombination aus den Farbwerten F_s und F_d.

c) Wenn beim Alpha-Blending von semitransparenten Objekten eine Sortierung notwendig ist, auch wenn der Tiefentest eingeschaltet ist, ist dies wegen der Möglichkeit, dass zwei Objekte mit unterschiedlichem Alpha-Wert überlagern sind. Die Sortierung erfolgt nach dem Alpha-Wert, damit das Objekt mit dem höheren Alpha-Wert überlagert wird. 





****************************************************************************************
****************************************************************************************




Answer to Question 9


(1) Die Einschr\u00e4nkung bei Rasterisierung ist notwendig, um die Lichtbrechung am ersten Schnittpunkt eines Kamerastrahls mit dem Objekt zu berücksichtigen. Dies ist wichtig, um die realistische Wirkung des Glasobjekts zu erzeugen.

(2) Um das Glasobjekt zu rendern, benötigen Sie einen Shader, der die Reflexion und Transparenz des Glasobjekts berücksichtigt. Eine Möglichkeit wäre ein Shader, der die Normal Mapping und die Cube-Environment Map verwendet, um die Lichtbrechung und die Reflexion des Glasobjekts zu simulieren.

(3) Um das Glasobjekt zu rendern, können Sie den Shader "figures/shader_first.png" verwenden. Dieser Shader enthält die notwendigen Funktionen und Eigenschaften, um das Glasobjekt zu rendern und die Lichtbrechung und Reflexion zu simulieren. 





****************************************************************************************
****************************************************************************************




Answer to Question 10


a)

```
float intersectDF( vec3 o, vec3 d, float maxSteps ) {
    vec3 s;
    float t;
    bool hit = false;
    for( int i = 0; i < maxSteps; i++ ) {
        vec3 G = vec3( 0.0, 0.0, 0.0 );
        vec3 x = o + d * t;
        if( DF( x ) ) {
            s = x;
            t = DF( x );
            hit = true;
            break;
        }
        G += d * t;
        t -= 0.001;
    }
    if( hit ) {
        return s;
    } else {
        return vec3( 0.0 );
    }
}
```

b)

```
if( DF( o ) ) {
    vec3 s = o + d * t;
    vec3 G = vec3( 0.0, 0.0, 0.0 );
    float eta = 1.3;
    float eta_inv = 1.0 / eta;
    vec3 R = normalize( d );
    vec3 N = normalize( G );
    vec3 NdotR = dot( N, R );
    vec3 NdotG = dot( N, G );
    vec3 NdotD = dot( N, d );
    vec3 RdotD = dot( R, d );
    vec3 RdotG = dot( R, G );
    vec3 RdotR = dot( R, R );
    vec3 NdotN = dot( N, N );
    vec3 NdotD_NdotG = NdotD * NdotG;
    vec3 NdotD_NdotR = NdotD * NdotR;
    vec3 NdotG_NdotR = NdotG * NdotR;
    vec3 NdotD_NdotG_NdotR = NdotD * NdotG * NdotR;
    vec3 NdotD_NdotG_NdotR_NdotN = NdotD * NdotG * NdotR * NdotN;
    vec3 NdotD_NdotG_NdotR_NdotN_NdotNdotR = NdotD * NdotG * NdotR * NdotN * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR * NdotNdotR;
    vec3 NdotD_NdotG_NdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR_NdotNdotR = NdotD * NdotG * NdotR * NdotNdotR * NdotNdotR





****************************************************************************************
****************************************************************************************




Answer to Question 11


a) Die Szene wird durch eine H\u00f6llk\u00f6rperhierarchie (BVH) mit achsenparallelen H\u00f6llk\u00f6rpern (AABB) berechnet. Jede BVH B' ist korrekt-funktionierend, wenn sie mit K' \u2264 K konstruiert wird, da sie die Szene korrekt beschreiben kann. Der Nachteil gegen\u00fcber einer BVH B, die mit T_K(x) mit K' < K generiert wurde, besteht darin, dass die BVH B' nicht alle Objekte in der Szene korrekt beschreiben kann, da sie nicht alle Details der Szene berücksichtigt.

b) Die Rauschfunktion n(x) wird nur minimal oft ausgewertet werden muss, um die Schnittpunkte von Strahlen r(i) = o + id mit dz < 0 zu finden. Dies geschieht sicher durch Raymarching, bei dem die Schnittpunkte gefunden werden, wenn r_z(i) \u2264 T_K(r_x(i), r_y(i)).

c) Eine Eigenschaft von Rauschfunktionen ist, dass sie eine endliche Anzahl von Werten haben. Die Wahl der Funktion n(x) = sin(x), x \u2208 R als eindimensionale Rauschfunktion zu verwenden, ist jedoch nicht ratsam, da sie eine unendliche Anzahl von Werten hat.

d) Die Ableitungsregeln f\u00fcr ein L-System mit V = {F, +, -}, \u03b1 = 60\u25e6 und Startwort F - - F - - F sind:

* F -> F + F - F - F
* + -> F
* - -> F

Diese Regeln erlauben es, die Schneeflocke durch eine Reihe von Schritten zu generieren. 





****************************************************************************************
****************************************************************************************




Answer to Question 12


a) Die Bézier-Kurve F(u) vom Grad 3 mit den Kontrollpunkten b0 = (0, 0), b1 = (12, 0), b2 = (0, 6), b3 = (8, 10) und der Eingabe u = 0.5 unterteilen.

Um die Kurve zu zeichnen, würde ich die Kontrollpunkte und die Kanten zwischen ihnen verwenden. Ich würde die Kanten zwischen den Punkten b0 und b1 sowie zwischen den Punkten b2 und b3 als Gerade zeichnen und die Punkte als Eckpunkte verwenden. Die Kante zwischen den Punkten b1 und b2 sowie zwischen den Punkten b3 und b0 würde ich als Bogen zeichnen.

b) Die Bézier-Kurve F soll durch eine affine Abbildung rotiert, skaliert und verschoben werden.

Um die Transformation durchzuführen, würde ich die Matrix der affinen Abbildung berechnen und die Punkte der Bézier-Kurve F durch diese Matrix transformieren.

c) Die Bézier-Kurve G(u) ist nicht die kubische Bézier-Kurve.

Um zu zeigen, dass die abgebildete Kurve nicht der kubischen Bézier-Kurve entspricht, würde ich die Kontrollpunkte und die Kanten zwischen ihnen verwenden. Ich würde die Kanten zwischen den Punkten b0 und b1 sowie zwischen den Punkten b2 und b3 als Gerade zeichnen und die Punkte als Eckpunkte verwenden. Die Kante zwischen den Punkten b1 und b2 sowie zwischen den Punkten b3 und b0 würde ich als Bogen zeichnen.

Diese Antworten sind jedoch nur eine Möglichkeit und können je nach Interpretation der Frage und der Abbildungen variieren. 





****************************************************************************************
****************************************************************************************




