Reflektionsvektor berechnen
-
Hi, ich möchte den Refletktionsvektor k' zu einem Vektor k und einer gegebnen Normalen der Oberfläche berechnen.
Ich habe die folgende Formel gefunden:
k' = Reflektionsvektor;
n = normale (normiert);
k = Richtungsvektor (normiert);k' = 2 * Kreuzprodukt(n, k) * n - k
Dieser scheint zu funktionieren.
Aber WARUM funktioniert der? Wie ist die Idee dahinter?
-
Bist du sicher, dass die Formel stimmt? Da steht nämlich vorne ein Skalar von dem dann ein Vektor subtrahiert wird und dann soll auch noch ein Vektor rauskommen. Das kann irgendwie nicht sein.
-
Ja, genau das wundert mich ja so:
Gefunden habe ich die Formel mehrmals in ähnlicher Form:
http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=39R= 2*(-I dot N)*N + I
vec3 reflect = normalize(2.0 * dot(normal, lightVector) * normal - lightVector);
Ich glaube ich habe die Formel falsch verstanden.
Ist mit "Dot" das Skalarprodukt gemeint?Kann mir jemand sagen, warum das funktioniert?
-
Ich kann dir zumindest schonaml sagen, dass das "dot"-Produkt im Englischen für das Skalarprodukt steht. Dann ist die Formel auch konsistent. Warum sie funktionier, darüber kann ich gerade nicht nachdenken (bin bei der Arbeit), aber das sieht mir danach aus, als ob sich die Formel direkt aus der geometrischen Konstruktion (Einfallswinkel=Ausfallswinkel) ableiten lässt.
-
Vielen dank schonmal.
Ist also das "*" einfach als Multiplikation eines Vectors mit einem Skalar zu verstehen?
dot(normal, lightVector) * normal
Gilt hierbei auch Punkt vor Strichrechnung?
dot(normal, lightVector) * normal - lightVector
Also so (siehe Klammern)?
vec3 reflect = normalize((2.0 * dot(normal, lightVector) * normal) - lightVector);