Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Ich habe vor nem Monat ungefähr nen Bumpmap shader fertig geschrieben. Der funktioniert jetzt allerdings so wie er ist, aber nur für eine Lichtquelle. Wie kann ich jetzt mehrere Lichtquellen brücksichtigen? Ich habe gelesen, dass man das mit Pixelbuffer objekten macht, aber wie kann ich die im zusammenhang mit dem shader verwenden?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Genau so, wie du die erste Lichtquelle einberechnest berechnest du auch die anderen ein. Dann addierst du die Werte einfach aufeinander.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Man kann auch mit einer for Schleife über mehrere Lichtquellen iterieren, jedoch gibt es eineige einschränkungen wie z.B. nicht genügend instructions und das man für jede anzahl von lichtquellen einen eigenen schader braucht (erst Shadermodel 4.0 Karten können im Fragmentshader uniform Variablen indizieren, welche für eine dynamische anzahl von licht quellen nötig sind)
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
meine Frage geht eigentlich nicht um den logischen Hintergrund. Ich hab mir das so vorgestellt, dass ich die geometrie, normalen, tiefen, diffusen und specular anteile eines Materials in eigene Texturenrender, so wie beim Deferred Rendering und anschließend diese einem Shader übergebe mit denn Lichtinformationen, der dann in eine weitere Textur die Luminanz schreibt (als rgb werte) und diese durch eine Schleife (im Programm nicht im shader) immer weiter überschreibt, bis alle Lichtquellen durchgearbeitet wurden.
ich habe halt nur keine ahnung, wie ich da mit den Pixelbuffer, oder Framebuffer arbeiten muss.
Wie kann ich zum Beispiel den Shader dazu "zwingen" in einen bestimmten Pixelbuffer zuschreiben und darauß zu lesen?
Brauch ich mehrere Pixelbuffer, oder kann ich alle oben genannten informationen in einen Pixelbuffer schreiben?
Die Beschreibung entspricht dem eines deferred Renderers. in dem Fall wird additives Blending aktiviert. (Man kann nicht in eine Textur rendern, aus der gerade gelesen wird)
Für eine eigene Implementierung werden mindestends GLSL shader und Framebuffer Objekte benötigt (Vertexbuffer Objekte sollten auber auch verwendet werden.)
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Dankeschön, dass es einem Deferred rendering entspricht weiß ich, da hab ich die idee ja her und dass ich framebuffer objekte brauche weiß ich auch, allerdings wollte ich lieber pixelbuffer objekte nehmen, um mich von der "power of two" regel lösen zu können, da ich kein display format kenne, das quadratisch ist. Mein Problem liegt darin, dass ich nicht weiß, wie ich den Pixelbuffer erstellen soll und anschließend vom shader aus dort hinein schreiben kann um die Daten der Lichtquellen darin zu sammeln. Das Pixelbuffer tutorial von euch ist nicht schlecht, wie Pixelbuffer funktionieren hab ich schon verstanden (von der Idee her) allerdings bekomm ich sie nicht zum laufen nach dem Tutorial und selbst wenn ich es hinkriegen würde wüsste ich immer noch nicht, wie ich shaderergebnis für shader ergebnis dort hinein speichern kann um sie anschließend zu einem Bild zusammen zurendern.
Der Link den du mir geschickt hast ist ne tolle sache, allerdings steig ich da überhaupt nicht durch.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.