martinthoma / kit-musterloesungen Goto Github PK
View Code? Open in Web Editor NEWMusterlösungen für Klausuraufgaben am KIT
Musterlösungen für Klausuraufgaben am KIT
Aufgabe 4 a)
Erstellung der Mip-Map-Pyramide:
In Stufe 0 wird die ursprüngliche Textur gespeichert, in Stufe 1 dann eine Textur die in beiden Dimensionen halbiert wurde usw.
Frage 4: Ich denke der Operator ist nicht kommutativ. Würde man die Reihenfolge (also SRC und DST) vertauschen, würde ja zweimal der Alpha-Wert von DST genommen. Dieser kann ja anders sein als der Alpha-Wert von SRC.
Bin mir nicht zu 100% sicher, von daher als Issue und nicht als Pull Request.
Skalierung?
Aufgabe 5 c)
Bei der 2. Iteration sollte \alpha_s=(-2)/6 sein, weil WEC_ymin(P_1)=-2 wie in Aufgabe 5a berechnet.
D.h. a_max ist -(2/6) und das neue Liniensegment (P_0+ (1/3)(P_1-P_0), P_1 - (2/6)(P_1-P_0))
Der wir sind in der Kugel Fall fehlt. Meine Lösung:
uniform vec3 eye; //Position des Betrachters in Weltkoord in vec3 dir; //Strahlrichtung in Weltkoord uniform vec3 spheres[10]; out vec4 fragColor; int main() { float t = -1; vec3 pos; vec3 center; for (i=0; i < 10; i++) { vec4 sphere = spheres[i]; vec2 s = intersectRS(eye, dir, sphere.xyz, sphere.z); if (s.x > 0 && s.x < t) {t = s.x; center = sphere.xyz;} if (s.y > 0 && s.y < t) {t = s.y; center = sphere.xyz;} // Wir sind in der Kugel } if (t != -1) { pos = eye + t * dir; fragColor = computeShading(pos, normalize(pos - center)); } // ... }
Aufgabe 1.c
Die Matrix C ist zum Schärfen und nicht zum Hervorheben aller Kanten (vgl Übung 02_Bildoperationen Folie 20)
Aufgabe 1.d
Die Helligkeit des Bildes ändert sich, bei normalisierten Kerneln bleibt die Gesamthelligkeit erhalten (s. Übungsfolie 02_Bildoperationen Folie 19)
Aufgabe 5
a) BVH 2, weil
-BVH2 im 1. Schritt nur 1 Schnitttest (bzw 2 Schnitttests, wenn die AABBs B und C einzeln getestet werden müssen) benötigt -> Erst Überprüfung ob Schnitt mit einem Primitiv bzw Sub-AABB möglich
-BVH1 im 1. Schritt immer 4 Schnitttests benötigt, dann direkt mit Primitiven
1 0 0
0 -1 0
0 0 1
C ist eine Spiegelung an der x-Achse, nicht y.
Via FB:
Die Fixed Function Pipeline kann doch nur Gouraud oder Flat Shading. Das heißt, die Beleuctung wird pro Vertex in Kamera Koordinaten berechnet. Dementsprechend müsste die Reihenfolge anders sein. Meine Lösung wäre da 1, 4, 5, 3, 2.
Rotationsmatrizenmultiplikation ist nicht kommutativ in
Beispiel:
R_x(\pi) * R_z(\pi) = [1 0 0;0 0 1;0 -1 0] * [0 1 0;-1 0 0;0 0 1] = [0 1 0; 0 0 1;1 0 0] \ne [0 0 1;-1 0 0;0 -1 0] = [0 1 0;-1 0 0;0 0 1] * [1 0 0;0 0 1;0 -1 0] = R_z(\pi) * R_x(\pi)
Wie schon in Aufgabe 1c) beschrieben (als u und v bezeichnet) ergeben sich die Achsen durch
z=-(C-E)
x=u \dot z
y= x \dot z
Hier geht es doch um Whitted-Style Raytracing und nicht um das Phong-Beleuchtungsmodell, oder? Ich denke die Aufgabe zielt eher darauf ab, was für Sekundärstrahlen verschossen werden (Schattenstrahl, Reflexionsstrahl, Transmissionsstrahl). Sicher bin ich mir jedoch auch nicht.
TODO
von Aufgabe 11a kann entfernt werden. Die Aufgabe ist, so wie sie ist, korrekt gelöst.
Die Skizze ist allerdings etwas undeutlich. Ich habe mal die Aufgabe auf Papier gelöst und meine Skizze angehängt. Sorry für den TeX-freien Beitrag. ;-)
(Ich habe am Rand noch eine umgangssprachliche Erklärung der C-Stetigkeiten notiert. Hab' sie mit eingescannt, vielleicht hilft sie jemandem.)
Farbe von glClear vergessen.
Richtig wäre bei (I.):
Ich glaub das ist ne richtig. Aufgabe ist ja ne Basiswechselmatrix. Dabei ist aber keine Basis die Normalbasis!
(1 0 0)_S1 heißt ja 1 * u1 + 0 * v1 + 0 * w1.
Also müsste für M' (M ohne translation gelten): (-1 0 0)_S2 = M' * (1 0 0) da -1 * u2 = 1 * u1. Das gilt aber für deine Rotationsmatrix nicht.
Die korrekte berechnung erfolgt durch Darstellung der orhonormalen Bsisvektoren von S1 durch die von S2:
-1 0 0
0 1 0
0 0 -1
Auch die Translation ist dann nicht zur Standartbasis sondern zur Basis des jeweiligen Raumes
(-1 -2 1) für S1 und (1 -2 -1) für S2.
Insgesamt:
-1 0 0 1
0 1 0 -2
0 0 -1 -1
0 0 0 1
Der Aufwand für den Aufbau ist linear bei Gittern: Du weißt ja sofort wo das dreieck hin muss wenn du dir es anschaust, musst es also nicht zweimal anschauen. Man muss das Ergebnis dann zwar noch eintragen und ein dreieck könnte ja über alle Felder des gitters gehen aber das ist nicht die Frage. Die Laufzeit dürfte O(n*m) sein wobei n die anzahl der dreiecke und m die anzahl der Felder im Gitter ist (im schlimmsten Fall muss man jedes dreieck in alle gitter zellen eintragen).
z' = E - C
x' = u \times z'
y' = z' \times x'
x,y,z ergeben sich dann noch aus der normalisierung. (Es ist ja eine Orthonormalbasis gefragt, glaub das heißt gerade orthogonale und normalisierte Basisvektoren.)
Hey,
"Der Mach-Band-Effekt kann auftreten/sichtbar werden" ist bei Flat-Shading korrekt. (siehe Flat-Shading).
Man muss jeden schnitttest maximal einmal durchführen.
Also
A, B 14, 15, C, 5 ,6 ,11 statt
A, B 14, 15, A, C, 5 ,6 ,11
Erstmal muss man sagen, dass die Aufgabenstellung nicht zur Skizze passt!
In der Aufgabenstellung wird von einem kubischen Spline (-> C_2 stetig, A-Frame, ...) gesprochen.
In der Skizze wird aber ein Spline gezeigt, welcher nur C_1 stetig ist (kein A-Frame).
geänderte Kontrollpunkte: b2, b3=c0, c1
geänderter Kurvenverlauf: zwischen b0 und c3
Hier sind die Kontrollpunkte b2' und c3' nicht eindeutig bestimmt (soweit ich weiß), deshalb ist die Skizze wohl einfach nur falsch und man sollte sie ignorieren und die Lösung für kubische Splines suchen.
geänderte Kontrollpunkte: a3, ..., d0
geänderter Kurvenverlauf: zwischen a0 und d3
Alle Kontrollpunkte a3', ..., d0' sind dabei eindeutig!
(II.) Ist auch
Die Gerade durch
Beim ersten:
Der aufbau-algorithmus passt die Datenstruktur an die Gomentrie an. Ich würde sagen die Aufgabe ist hier nicht klar formuliert bei adaptiven gittern ist es der Fall aber bei regulären gittern nicht. Da nur Gitter da steht bin ich von regulären Gittern ausgegangen.
Ein Transmissionsstrahl der den hellen Körper rechts im Bild verlässt fehlt, so auch ein Schattenstrahl vom Austrittspunkt aus.
Gerade von Holger via E-Mail:
steps sollte noch erhöht werden; t und d sollten evtl. gleich sein?
Muss ich mir noch anschauen.
Die Aufgabe ist richtig beantwortet, aber die Punkte sind durcheinander gekommen: Die dritte Kurve verletzt nicht Punkt 3 (Endpunktinterpolation) sondern Punkt 4 (Variationsreduktion).
Die anschließende Begründung ist in Ordnung.
Nur ein kleiner Rechenfehler in Gleichung (17)
P2'_h = (5, -5, 5)
woraus für (18) folgt:
P2' = (1, -1)
Vierte Aussage trifft auch auf BVHs zu.
SAH lässt sich zur Konstruktion von BVHs einsetzen. Vgl Foliensatz 5 Folie 98
Meine Lösung wäre
Jeder Farbeindruck für den Menschen kann mit drei Grundgrößen beschrieben werden.
Ich bin der meinung die Aussage ist richtig. Vgl. 1.d sagt ja nur das der physikalisch realisierbare RGB-Farbraum nicht ausreicht. Trotzdem ist es ein Dreidimensionale Größe (vgl. Graßmannsche Gesetze Folie 6, 01-..-Teil 2).
Soll ich so Anmerkungen lieber in FB oder hier posten?
Aufgabe 3
a) Bei Adaptiven Supersampling werden bei zu großer die Pixel in 4 Bereiche unterteilt und dann weitere Strahlen verfolgt, bis die Differenz den Schwellwert unterschreitet.
Bei stochastischen Supersampling werden die Pixel in Gitter unterteilt und dann pro Gitter-Zelle ein Strahl durch einen Zufallspunkt innerhalb der Zelle geschossen.
Ich glaube zur Berechnung von s müsste man ein Minus hinzufügen:
s = -r_x/2r_z + 1/2
Vgl. Kapitel 4, Folie 110.
Objekte werden bei der Traversierung potentiell mehrfach geschnitten?
BSP:
Ich denke, dass hier ein Kreuz hin muss, da in der Aufgabenbeschreibung steht, dass Dreiecke nicht zerteilt werden (und natürlich kein Mailboxing).
Bei einem Aufbau wie in meiner Skizze, wird das Dreieck x zweimal überprüft, da der Schnittpunkt beim ersten mal nicht im aktuellen Knoten ist (vgl. K5, F106).
Natürlich kann man in dem Beispiel einen BSP aufbauen, der keine Dreiecke schneidet, es ist trotzdem ein valider BSP und deshalb gilt auch die Aussage.
Ich verstehe Folien 73 und 74 zu Quadtrees so, dass immer mit dem nahsten Kindknoten weiter gemacht wird.
Bei der Aufgabenstellung ist jedoch unklar in welcher Knotentiefe die Dreiecke sind.
Auf Folie 74 kommt beides vor:
Ich vermute wir sollen wie in Hauptklausur 2012 Aufgabe 5 b) (lies da mal den Aufgabentext genau) annehmen, dass die Primitive nur in Blattknoten gespeichert werden und ggf. geteilt werden.
Dann gibt es eine einfache Lösung nämlich einfach: G I I H C C C A (und Schnitt gefunden --> fertig).
(Achso: Wir sollen nur Schnitte mit Dreiecken angeben, steht da.)
Das ist eine "Grau-Zone", glaube ich. "Sortierung der Primitive notwendig" -- dies scheint mir die Sortierung nach den Objektmittelpunkten zu umfassen.
Die angegebene Lösung ist falsch.
Im vergleich zu Foliensatz 4 Folie 38 sind b und (1-b) getauscht.
Somit ist t = t12 * b + t34 * (1-b)
Sollten wir hier nicht die Transformationsmatrix für Normalen anpassen? Also aus
vec3 normal_wc = matO2W * normal;
sollte
vec3 normal_wc = transpose(inverse(matO2W)) * normal;
werden? Der Code-Kommentar auf dem Aufgabenblatt sagt eindeutig, dass die Matrix zur Transformationen von Positionen und nicht (wie hier verwendet) von Normalen dient. Dieses Vorgehen würde auch erklären, warum es hier 9 Punkte gibt.
Ich muss allerdings eingestehen, dass ich schon etwas überrascht bin, dass es eine inverse
Funktion in GLSL gibt.
A) 1)
Meiner Meinung nach erfolgt kein Blending. Durch den aktivierten Tiefentest wird der rote Würfel nicht beachtet, da er hinter dem blauen Ball liegt.
Daher: color_P=(0.0, 0.0, 1.0, 0.5)
siehe "OpenGL Teil 2 und 3" Folie 88
b)
Bleuchtungsberechnung findet auf jeden Fall vor der Projektionstransformation statt (OpenGL Teil 1, Folie 39)
Daher würde ich sagen
1
2
3
5
4
c)
Nach der Projektionstransformation
Für b) und c) siehe auch https://en.wikipedia.org/wiki/Graphics_pipeline#Lighting
Berechne einfach: n = normalize(cross(P3-P1,P2-P1))
Fehler in #58:
Punkt 2 ist definitiv falsch! Zitat Foliensatz 07, Seite 15:
Primitive Assembly setzt aus den Vertices die angeforderten Primitive zusammen und ist nicht programmierbar.
(Die anderen Punkte hab ich nicht überprüft, nur bei Punkt 2 ist mir der Fehler gleich aufgefallen.)
Teil c)
Der erste Vorschlag sollte richtig sein: c2 = (5,2), denn b2+(b2-b1)=c1+(c1-c2)
("Kurven und Flächen" Folie 38)
Aufgabe 8
b) Tiefentest ist aktiviert, weil Feuer teilweise von Rauch verdeckt der weiter vorne im Bild ist
Tiefenpuffer deaktiviert, weil sich Rauch konstant verändert, d.h. Puffern bringt nichts da nur falsche Werte enthalten wären und deshalb immer neu berechnet werden muss
Aufgabe 4 a) ii)
Man sollte vor der Normalisierungstransf. clippen, weil vor der Dehomogenisierung x=w gilt, nach dem Dehomogenisieren müssen Tiefenwerte betrachtet werden um problematische Fälle zu erkennen (w=0 möglich, dann Division durch 0?) (s. Vl 06 Folie 39-41)
d)
Laut https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml
Lineare Interpolation zw. nächsten 4 Textur-Werten
und
Nearest-Neighbor: Verwendung des nächsten Textur Elements
Hier fehlt der Fall, dass der Strahl innerhalb der Kugel startet:
else if (isec.y < t && isec.y > 0)
{
t = isec.y;
pos = eye + t * dir;
normal = normailize(pos - spheres[i].xyz);
}
Ich weiß nicht, ob es sich hier nur um eine zeichnerische Ungenauigkeit handelt, aber soweit ich weiß, sollte die erste Bézierkurve in Aufgabe 12 c) entsprechend den Punkten symetrisch sein. Das kann ich in der Zeichung aber nicht erkennen.
Ich meine, das Ergebnis müsste auf "Nein" korregiert werden, da der Graph offensichtlich nicht symmetrisch ist / hier nicht durch den Mittelpunkt geht.
Stelle im Text: https://github.com/MartinThoma/KIT-Musterloesungen/blob/master/CG/2015-Hauptklausur/2015-Hauptklausur.tex#L417
Es ist der Reflexionsstrahl für das Raytracing gesucht also von der Kamera aus. (Nicht von der Lichtquelle aus).
Ich denke mal das es bein transmittierten Strahl genauso ist, wobei hier die Aufgabenstellung nicht ganz klar ist.
Der Winkel alpha lässt sich dann als R_V \cdot L (= R_L \cdot V - so ist er jetzt eingetragen) eintragen.
Hinweis zu f. Der Phongexponent ist auch Materialparameter, er gibt ja an wie sehr die Oberfläche streut.
Bei der Aufgabe 6c sind mir zwei Punkte aufgefallen die glaube ich nicht so stimmen.
Aussage 2 ist Falsch, da bei einer BVH die Dreiecke immer nur in maximal einem Blatt enthalten sind. Somit werden sie maximal einmal getestet und kein Mailboxing ist notwendig.
Aussage 3 ist Falsch. Zumindest habe ich keine Aussage zum Speicherbedarf gefunden. Die Anzahl der nötigen Schnitttests hängt jedoch logarithmisch von der Anzahl der Primitve ab. vgl. Foliensatz 5 Folie 48.
Aufgabe 6d:
Aussage 3 trifft auch auf BVHs zu. vgl. Folie 98
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.