Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Hi Leute,
Hat irgendjemand eine Schattendemo für mich? Ich habe versucht das Tutorial http://wiki.delphigl.com/index.php/GLSL_Licht_und_Schatten zu machen^^ Ich habe das prinzip + den Shadercode verstanden, nur ich schaffe es nicht die Schatten in meinem Programm umzusetzten, weil ich den Delphi-Quellcode vom Tutorial nicht nachvollziehen kann.
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Ich kann einfach nicht ruhig schlafen, solange das nicht läuft, denn das ist etwas ziemlich wichtiges. Ich habe im Anhang meine Projektdatei und das Ergebnis des Programms. Irgendetwas läuft schön falsch. Es sieht aus, als wäre meine ganze Szene im Schatten.
Ich hoffe ihr könnt mir helfen und nimmt euch auch kurz Zeit mein Projekt durchzugucken
Dateianhänge:
Projekt.zip [97.95 KiB]
421-mal heruntergeladen Ergebnis.jpg [52.59 KiB]
Noch nie heruntergeladen
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Niemand hat die Zeit, sich mal eben so eine Zip runterzuladen, die bei sich zu kompilieren (ne Fremde .exe ausführen ... hmm; falls man überhaupt Windows hat) und dann deine Fehler zu debuggen. Du musst schon versuchen, den Fehler irgendwie einzugrenzen. Lass dir z.B. den Inhalt der relevanten Texturen ausgeben (wenn es Shadowmapping ist). Rechne ein kleines Offset auf die Daten drauf um zu schauen obs vielleicht nur nen Rundungsfehler ist und whatnot.
Wenn du nicht zeigst, dass du selber ein wenig Arbeit reingesteckt hast, den Fehler zu finden, wird sich nur schwer jemand motivieren lassen. Leider. Aber wir haben auch alle nicht unendlich viel Zeit.
grüße
_________________ 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
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
ok
Ups, als ich gerade eine logische Reinfolge schreiben wollte, was ich gemacht habe und daher bei OnCreate anfangen wollte, sah ich gleich, dass ich die Prozedur zum erstellen des Framebufferobjekts gar nicht ausgeführt habe. Jetzt sehe ich schon sowas wie Licht^^ Ich werde versuchen, die noch seltsamen Schatten zu fixen Wenn ich da noch das ein oder andere Problem habe melde ich mich
Das kennt ihr doch bestimmt auch, dass man nicht auf den Fehler kommt, bis man es jemanden zeigen möchte^^
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, genau deswegen sollst du ja erstmal versuchen den Fehler einzugrenzen . Aber schön dass es jetzt schonmal besser funktioniert
grüße
_________________ 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
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
So sieht das momentane ergebnis aus (siehe Anhang) ^^
Ich frag mich gerade, was deneben gegangen sein könnte. Ich denke irgendetwas mit dem Framebufferobjekt. Ich denke aber nicht, dass das am Shader leigen könnte.
Falsch an dem Ergebnis ist, dass: 1. das Quad keinen Schatten castet 2. der Lichtkreis nicht dieselbe Farbe hat, sondern dass an den Winkeln 0° und 180° ein schwarzer Übergang ist
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Was habe ich gemacht? Beim erstellen der Anwendung habe ich die Shader geladen und ein Framebufferobjekt für das Rendern der Schatten erstellt. An diesem Framebufferobjekt habe ich eine Texture gebunden, die das grenderte als shadow_map speichern soll. Die Größe der Texture entspricht meiner der Variabeln shadow_size. Nach dem erstellen dieses Framebufferobjekts und der Framebuffertexture prüfe ich den Status des Framebufferobjekts. Im Quellcode sieht das so aus:
Code:
procedure TForm1.CreateFBO;
begin
shadow_size :=4096;// Die Auflösung, die ich erwähnte
Beim ausführen der Procedure CreateFBO kam es zu keinen Fehlern, der Status des Framebufferobjekts hatte keine Fehler.
Dieser Abschnitt (Shader laden + FBO) scheint einwandfrei funktioniert zu haben. Deshalb erläutere ich jetzt, was ich beim Rendern, das ich in dem OnIdle-Event der Anwendung ausführe gemacht habe. Als erstes habe ich die Zeit für die FPS berechnung gemessen. Danach habe ich versucht, das FBO zu rendern (mit den ShadowShader). Da ich zwei Lichter rendere habe ich eine for-Schleife in der ich 360° rendere. Danach deaktiviere ich das Framebufferobjekt und rendere dich Szene mit dem Final-Shader. Nach dem eigentlichen Rendern berechne ich die FPS. Im Quellcode sieht das bei mir so aus:
Das habe ich gemacht, das ergebnis ist seltsam^^ Es etwas wie ein Licht gerendert, doch es entstehen keine Schatten und der Lichtkreis ist auch fehlerhaft. Ich habe das Gefühlt, dass es am Rendern des Framebufferobjekts liegt. Da ich mit Framebufferobjekten noch nicht viel Erfahrung habe, bitte ich euch um Hilfe
PS: Ihr könnt auch gerne selbst einen Blick auf das Projekt werfen. Im Anhang habe ich die Projekt-Datei
Dateianhänge:
Dateikommentar: Die Projektdatei. Projekt.rar [90.54 KiB]
401-mal heruntergeladen
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
ähm.... ich sags mal .... nett.... die Basics sind schon voller Fehler.... ich empfehl dir mal nehe und robsite durchzuarbeiten um die Grundlagen zu verstehen...
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Genau. Den Beitrag habe ich ja durchgearbeitet. Das Ergebnis ist meine Projektarchiv, das ich schon hochgeladen habe. Doch ich wollte auch fragen, ob jemand von euch etwas ausführbares hat oder mir Fehlerstellen in meinem Projekt zeigen kann.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ja , ich habe etwas Ausführbares. Allerdings nicht aus diesem Tutorial, sondern von der Website Fabien Sanglard; das ist kein Dual Paraboloid- sondern ein normales Shadow Mapping, nur mit einer Shadowmap, und ich habe es in meine Engine "hineingeflochten".
Das bedeutet, damit Du damit etwas anfangen kannst, muss ich es in eine einfachere Form gießen, was gar nicht so einfach ist. Und ich arbeite schon lange nicht mehr mit Delphi, sondern mit Free Pascal. Ich verwende kein TForm, sondern erzeuge alle meine Fenster selbst. Das sollte eigentlich in Delphi auch laufen.
Zusätzlich ist gerade die Woche vor Weihnachten(!).
Allerdings - ich habe eine Vorlage für eine Test-Grafikanwendung, mit der ich alle meine Tests mache und auch archiviere. Die könnte ich verwenden und ein ShadowMapping einfügen, das wäre vielleicht bis morgen Abend zu schaffen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.