ich versuche mich gerade an der Phong-Beleuchtung. Nur scheitere ich gerade gedanklich an der spekularen Reflexion. Woher bekomme ich die Reflexionsrichtung? Die Lichtrichtung ist ja einfach gl_LightSource[0].position.xyz. Zur Reflexionsrichtung habe ich gefunden, dass das hier gehen soll: gl_LightSource[0].halfVector.xyz. Nur was ist der halfVector hier genau? Also zwischen welchen beiden Vectoren ist er die Hälfte? Zw. Lichtrichtung und ...? Oder muss Reflexionsrichtung selbere berechnen (Lichtrichtung an der Normalen spiegeln)?
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Der Reflexionsvektor ist wie der Name schon sagt, der Vektor in dem das Licht auf der Oberfläche reflektiert wird. Da gibts ein einfaches Gesetz für. Eintrittswinkel = Austrittswinkel. Im Prinzip muss der Lichtvektor um 180° an der Normalen gedreht werden und wird hinterher invertiert, damit er wieder von der Oberfläche wegzeigt. Gibt vielleicht auch einfacherer Möglichkeiten den Vektor zu berechnen. Die Sache mit dem Halfvektor funktioniert anders. Man nimmt den Betrachtervektor und den Lichtvektor und sucht den idealen Vektor dazwischen. Das ist genau der Vektor in der mitte, deshalb ja Halfvektor. Anhand der Abweichung zwischen Betrachtervektor und Halfvektor (beide Vektoren normieren und Skalarprodukt anwenden) kann jetzt ermittelt werden, wie hoch die Intensität der Spekularanteile ist.
P.S.: Den Halfvektor könnte man glaub ich berechnen indem man den Betrachtervektor und den Lichtvektor addiert, normiert und dann invertiert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das mit dem Halfvector hab ich jetzt nicht wirklich verstanden. Das was im Wiki steht ist das, was man mir an der Uni zum Phong Shading beigebracht hat. inkl. der Zeichnungen. Da ist jetzt kein Halfvector mit dabei, sondern nur der Winkel zwischen Reflektierten Licht und Betrachtervector.
Für was brauchst du denn den Halfvector?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Es gibt zwei Beleuchtungsmodelle: "Phong" und "Phong-Blinn Approximation" Das erste steht im Wiki, das zweite ist geringfügig schneller und wird von OpenGL benutzt. Ich hänge einfach mal die zwei Seiten dazu aus dem Skript meiner CG-Vorlesung an.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Also, wenn man das per Shader (GLSL) implementiert, wird man dafür wohl die fertige Funktion reflect verwenden. Im Wiki steht, dass diese folgende Formel verwendet:
Resultierender Vektor = I-2 * dot(N,I) * N
Wobei I der Vektor ist, der an der Ebene mit dem Normalenvektor N reflektiert wird.
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:37, insgesamt 1-mal geändert.
Was ich mich dabei gerade auch Frage: Wird der Vertexshader nicht eigentlich pro Shader aufgerufen? Wenn ja ist doch die Normale zwischen zwei Vertexen nicht interpoliert, oder?
Was ich mich dabei gerade auch Frage: Wird der Vertexshader nicht eigentlich pro Shader aufgerufen?
Der Vertexshader wird pro Vertex aufgerufen, deswegen heißt der auch so Varying-Variablen wie z.B. dein vertexNormal werden dann über das Dreieck interpoliert bevor sie an den Fragmentshader gehen.
Vermutlich hast du hier "Phong" und "Phong-Blinn" durcheinander geworfen. Der reflektierte Vektor ist NICHT der HalfVektor. Du berechnest den Winkel zwischen dem reflektierten Vektor und der Normale. Du brauchst aber den Winkel zwischen reflektiertem Vektor und Vektor zur Kamera.
Vermutlich hast du hier "Phong" und "Phong-Blinn" durcheinander geworfen. Der reflektierte Vektor ist NICHT der HalfVektor. Du berechnest den Winkel zwischen dem reflektierten Vektor und der Normale. Du brauchst aber den Winkel zwischen reflektiertem Vektor und Vektor zur Kamera.
Danke - das war es (abgesehen davon lightDir falsch war )
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.