diff --git a/2013_14-Aufgabe11.md b/2013_14-Aufgabe11.md new file mode 100644 index 0000000..83ef350 --- /dev/null +++ b/2013_14-Aufgabe11.md @@ -0,0 +1,59 @@ +# Aufgabe 11 + +Durch die Aufgabe gegeben: +```glsl +// Rückgabewert: true, wenn es einen Schnittpunkt gibt, sonst false +bool intersect( + in int i, // Index der zu testenden Ebene (siehe Text) + in vec3 X, // Ausgangspunkt des Strahls + in vec3 d, // Strahlrichtung + out float t // Strahlparameter des Schnittpunktes S: S=X+t*d +); +``` + +```glsl +vec3 determineIntersection(in vec3 P, in vec3 r, out int index) +{ + // Ermitteln Sie hier den Schnittpunkt mit der nächsten Gefäßfläche + // und geben Sie ihn zurück. Zusätzlich muss ’index’ auf den Index + // der entsprechenden Seitenfläche gesetzt werden. + + int index = 0; + float dist = -1; + + for (int i = 0; i < 6; i++) { + float t; + if (intersect(i, P, r, t)) { + if (dist < 0 || t < dist) { + dist = t; + index = i; + } + } + } + + return P + vec3(dist) * r; +} +``` + +```glsl +vec2 determineTextureCoordinate(in vec3 S, in int index) +{ + vec2 UV; + switch(index) + { + // Vervollständigen Sie die Fälle entsprechend der Aufgabenstellung + case 0: + case 1: UV = S.yz; break; + case 2: + case 3: UV = S.xy; break; + case 4: + case 5: UV = S.xz; break; + } + // Fügen Sie ggf. notwendige weitere Anweisungen hier ein + + // UV sind immer noch [-1, 1] bis hier, also normalisieren: + UV = vec2(0.5) + vec2(0.5) * UV; + + return UV; +} +```