Hi,
ich hatte vor einiger Zeit hier schon einmal ein Thema zu einem einfachen Licht und der Normal Matrix erstellt, nachdem ich jetzt längere Zeit mich nicht aktiv mit OpenGl beschäftigt hatte, wollte ich die Methode von damals etwas verändern.
Falls ich es richtig verstanden habe, sollte es möglich sein die Normal Matrix direkt aus der Modelviewmatrix zu berechnen ohne den Umweg über eine temporäre Matrix, die alle Matrix Operationen enthält, zu gehen.
Wenn ich allerdings die Normal-Matrix nun als die transponierte der Inversen Matrix der Modelview-Matrix definiere, bewegt sich das Licht mit der Kamera. Ich wollte dieses Problem dardurch lösen, dass ich die Modelview Matrix vorher in eine 3x3 Matrixe umwandele, wobei der Translationteil wegfällt, jedoch hat dies nicht funktioniert.
Die „Kamera“ ist immer an der gleichen Stelle. Die Illusion, dass die Kamera sich bewegen würde, entsteht, weil alle anderen Objekte bewegt werden. Gehst Du in Deinem Beispiel nach links, bewegt sich in Wirklichkeit Dein Objekt nach rechts. Soll sich das Licht statisch zum Objekt verhalten, musst Du das Licht entsprechend bewegen. In Deinem Beispiel vermutlich etwas wie -normalMatrix*sunLight.vDirection.
Ansonsten läuft Dein Beispiel bei mir aber leider auch nicht vernünftig. Das Objekt wirkt einfach falsch, auch ohne Licht.
Wenn ich die Matrix und den Vector im Fragment Shader miteinander multipliziere, funktioniert es wunderbar :).
MfG,
~Oneric
*** Edit ***
[QUOTE=Oneric]Hi,
Wenn ich die Matrix und den Vector im Fragment Shader miteinander multipliziere, funktioniert es wunderbar :).
[/QUOTE]
Theoretisch sollte es doch auch möglich sein den Vector vor dem Uploaden in den Shader mit der Matrix zu multiplizieren, wenn ich jedoch versuche dies zu relaisieren, habe ich jedoch das gleiche Problem wie vorher.
Was mache ich falsch ?
Also die Lösung war eigentlich recht simpel, ich habe in der Multiplikationsmethode schlicht die Matrix-Spalte mit der Matrix-Zeile vertauscht, nun funktioniert es wunderbar