Ich habe jetzt schon in mehreren Posts gelesen, dass die Commu sich einig ist, dass das OGL-Licht absolut nichts taugt, und man Lightmaps bevorzugen soll. Da ich jetzt endlich mit der Berechnung von Normalen auch Licht anwenden kann, frage ich mich eigentlich warum: Man setzt ein Licht an eine bestimmte Position, man kann für jedes Material seine Eigenschaften setzen...was will man eigentlich mehr? Habe ich da vielleicht etwas übersehen, einen Nachteil? Was soll am OGL-Standard-Licht so mies sein?!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Die OpenGL-Standardbeleuchtung beleuchtet nur auf Vertex-Basis und ist daher ein alter Hut. Wenn man eine richtig schöne Beleuchtung will, dann muss die Per-Pixel sein. Das geht dann nur über Lightmaps (Statisch und eher per-Texel als per-Pixel) oder über Shader.
Der Unterschied lässt sich sehr leicht an einem einzelnen Quad darstellen. Nutze da mal das OpenGL-Licht für ein Spotlight und du wirst ganz schnell sehen warum Per-Vertex-Beleuchtung nix tolles ist.
THX schonmal für die Antworten, dachte, das Licht wäre unschlagbar, aber wenn es nichtmal einen Schatten wirft...
da wäre aber noch eine Frage: Hat jemand schonmal versucht, das Licht irgendwie so umzuproggen, dass es dynamisch wird?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wie umproggen? An der OpenGL-Beleuchtung kannst du selbst nicht ändern, aber die ist doch vollkommen dynamisch. Oder was meinst du? Wenn du das PPL über Shader machst, dann wird das auch dynamisch, aber Lightmaps kann man nur bedingt dynamisch machen (über Tricks), denn permanent neue Lightmaps zu berechnen geht nicht.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dann meinst du kein Licht, sondern einen Projektor. Das hat mit Beleuchtung nix zu tun (ausser bei nem Raytracer) und wird in Polygonwelten normalerweise über eine auf die Geometrie projezierte, voberechnete, Schattenwurfstextur der Lampe gemacht. Oder meinst du nur sowas wie ne normale Glühbürne? Das würde man dann doch über Shader oder 3D-Texturen machen und dann wärs PPL das dynamisch ist.
...ist mir alles zu kompliziert, ich wollte nur wissen, ob das ganz normale OGL-Licht, welches mit Normalen berechnet wird, sich auch bewegen kann, was weiss ich, in Richtung der Z-Achse. Über Shader will ich ungern gehen, weil das zu hoch ist ^^
Also ich muss jetzt doch mal das OpenGL Licht verteidigen . Es ist schnell eingerichtet, funktional, hat ein brauchbares Materialmodell (mit zweiseitigen Oberflächen), läuft überall - und auf den meisten Grafikkarten ist es auch schön hardwarebeschleunigt (entweder durch T&L, auf ganz neuen Karten dürften zumindest entsprechende Shader ziemlich optimiert sein).
Wer Per Pixel Beleuchtung möchte, kommt natürlich um ein eigenes Lichtmodell nicht herum, OpenGL Licht deswegen aber gleich zum alten Eisen legen, würde ich nicht.
Wie bereits gepostet, ist OpenGL Licht voll dynamisch - d.h. sobald die Lichtposition geändert wird, passt sich die Szene beim nächsten Zeichnen sofort an, ohne dass irgendwelche weiteren Berechnungen notwendig sind.
Dass keine Schatten möglich sind, stimmt auch nicht wirklich - mit Stencil Buffer ist dies kein Problem, wie folgendes Demo zeigt - wenn du nur Schatten auf eine Ebene werfen möchtest, wirds sogar wirklich leicht :
aber das normale OGL-Licht selbst wirft keinen Schatten, sondern da brauche ich das den Stencil-Buffer für. Aber wie stelle ich es an, dass das Licht dynamisch wird? im Tutorial Das Wesen von Hell und Dunkel werden Lichtposition/Ambient-Wert usw. ja als Konstanten festgelegt. Wie kann ich jetzt ein Licht machen, dass sich entlang der Z-Achse bewegt? (Kleiner Codefetzen wäre sehr hilfreich)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dann übergib anstatt der Konstante doch einfach ein Array mit 4 Single-Werten die deine Lichtposition darstellen. Das hat aber doch nix mit der Dynamik des Lichtes zu tun, sondern ist Programmiergrundlage.
...klar, hätte ich eigentlich drauf kommen müssen...ich war irgendwie zu fixiert auf die Aussage, dass das OGL-Licht immer statisch ist, sich also nicht bewegt, und da hab' ich mir Gedanken darüber gemacht, wie man es irgendwie mit einem Trick lösen hätte können, dass man aber einfach aus einer Konstanten eine Variable macht, darauf bin ich net gekommen, lol
danke an SOS und Mars, die mir in diesem Post alle Fragen bezügl. des Lichts beantwortet haben!
Einen Nachteil hat das OGL-Licht noch: Wenn Du z.B. einen Gang mit ca. 10-15 Fackeln hast, dann kannst Du nicht einfach für jede Fackel ein OGL-Licht nehmen, da das OGL-Licht begrenzt ist (IMHO auf . Dann musst du Lightmaps berechnen (und das von jeder Fackel aus) um eine einigermasen realistische Beleuchtung zu bekommen. Oder eben, wie SOS erwähnte, Shader verwenden.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.