im Vertexshader hat man ja Zugriff auf die Struktur, in der die gesetzten Lichtquellen abgelegt sind.
In der FixFunction-Pipeline ist es ja wichtig, wo man das Licht setzt, also z.B. vor oder nach gluLookAt.
Da wollt ich mal fragen, wie die Lichtquelle im Shader ankommt? "Roh" oder schon transformiert? Und wenn roh, wie kann man dann unterscheiden, ob z.B. die Lichtquelle vor oder nach der Kamera gesetzt wurde?
Eine andere Frage hätte ich noch zum Flat-Shading. Wie kann man sowas per Shader realisieren? DIe Übergabevariablen von VS zu PS sind doch immer varying, oder?
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
ich bin der meinung es ist so das die lichtposition so im shader ankommt wie die vertexposition also wie du sagst roh (nicht transformiert)
und sie zu transformieren musst du sie einfach mit gl_ModelViewProjectionMatrix mulitlizieren
@flat shading
hab ich mir zwar noch nie gedanken drüber gemacht aber ich würde sagen die normalen pro fläche angeben sollte es tun
ich bin der meinung es ist so das die lichtposition so im shader ankommt wie die vertexposition also wie du sagst roh (nicht transformiert) und sie zu transformieren musst du sie einfach mit gl_ModelViewProjectionMatrix mulitlizieren
Wenn dann noch nur mit der gl_ModelView, oder? Um in den Raum der "eye-Koordinaten" zu kommen.
Aber irgendwie muss sich das doch auch unterscheiden lassen, wo die Lichtquelle gesetzt wurde. Ich denke die neuen Grafikkarten haben keine FixFunction-Pipeline mehr sondern emulieren das durch Standard-Shader. Und irgendwie müssen die es ja gemacht haben, dass das Licht vor gluLookAt an einer anderen Stelle ist als nach gluLookAt.
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Wenn dann noch nur mit der gl_ModelView, oder? Um in den Raum der "eye-Koordinaten" zu kommen.
*räusper* stimmt sorry
Pellaeon hat geschrieben:
Aber irgendwie muss sich das doch auch unterscheiden lassen, wo die Lichtquelle gesetzt wurde. Ich denke die neuen Grafikkarten haben keine FixFunction-Pipeline mehr sondern emulieren das durch Standard-Shader. Und irgendwie müssen die es ja gemacht haben, dass das Licht vor gluLookAt an einer anderen Stelle ist als nach gluLookAt.
äh... ich glaub ich weis jetzt was du meinst und ich fürchte da musst du deinem shader mitteilen was er wann machen soll
@grafikkarten: da "wissen" die treiber ja was sie in welcher reihenfolge an die graka senden sollen
Die Lichtquellenposition wird beim setzten mit der gl_ModelViewMatrix multipliziert. Wenn man mehrere Lichtquellen verwendet sollte man diese nicht als varying an den Fragmentshader weiter geben, da die anzahl der Varyings stark begrenzt ist.
Die Lichtquellenposition wird beim setzten mit der gl_ModelViewMatrix multipliziert. Wenn man mehrere Lichtquellen verwendet sollte man diese nicht als varying an den Fragmentshader weiter geben, da die anzahl der Varyings stark begrenzt ist.
Erstmal danke für die Antwort.
Da hab ich gleich noch ein paar Fragen zu^^
Wo steht das denn? Ich hab mir mal die Spec von der offiziellen Seite zu glSlang grob durchgelesen, habe dazu aber nichts gefunden(kanns natürlich auch überlesen haben)
Wegen der Übergabe: die Lichtdaten gibt man doch eh nicht an den Fragmentshader weiter, oder? Na gut außer beim Bumpmapping. Aber Rendern mehrerer Lichtquellen macht man doch eh über mehrere Renderpasses, soweit ich gelesen habe(über Transparenz).
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.