ich möchte in meinem 2D Spiel gerne ein paar Lichtquellen einbauen, die dann bei abgedunkelter Umgebung scheinen.
Dazu habe ich jetzt erst mal die einfachste Möglichkeit realisiert: Eine Textur, die Schwarz ist, und in der Mitte einen transparenten Kegel hat. Diese wird dann einfach über das gesamte Bild gelegt, so dass nur noch der in der Textur transparente Bereich zu sehen ist und der Rest abgedunkelt wird.
Der allererste Versuch war quasi das Ganze umgedreht, d.h. eine Textur mit einem weißen Lichtkegel. Das sieht allerdings ziemlich schlecht aus und man kann kaum etwas besser erkennen als in der Dunkelheit.
Nun zum Problem: Ich bin zwar absolut zufrieden mit meinem einen Lichtkegel. Aber ich bekomme leider große Probleme, sobald ich mehrere Lichtquellen gleichzeitig auf dem Bildschirm haben möchte. Denn dann überlappen sich die schwarzen Teile der Lichtquellentexturen natürlich, und daraus folgt, dass die Lichtkegel gegenseitig in das Schwarz des anderen Lichtkegels leuchten.
Wie kann ich das umgehen oder welche andere Methode kann ich benutzen um solche Lichtquellen einfach zu erstellen?
Hab hier mal ein paar Screenshots um das Ganze klarer zu machen... (von unten nach oben anguggen bitte
Grüße
Passi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Wenn du es auf diese Art Lichtkegel realisieren möchtest so könntest du vorher deine Lichtkegel in einem Pixel Buffer zusammen blenden und die neue Textur wie bisher verwenden.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hast du das 2D tutorial gelesen (Einsteigertuts)?
Dort hatte Sascha doch auch 2 Lightmaps übereinandergeblendet. Ließ dir das nochmal durch...ich sag mal "Alphatest"...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das Tutorial hab ich gelese, ja. Das geht zwar, aber die Beleuchtungsmethode ist nicht viel besser als mein erster Versuch (siehe Bilder), das sieht ziemlich hässlich aus finde ich
Das mit dem PixelBuffer.. ich wüsste gerade nicht, was mir das genau bringt. Dann gäb es doch trotzdem noch Probleme mit dem schwarzen Bereich der Texturen, sobald sich 2 Lichtquellen überschneiden, oder?
Gibt es vielleicht einen Blendmodus / eine andere Möglichkeit, einfach alle Pixel z.B. um 80% ihrer Helligkeit zu erhöhen? Hab verschiedene Blendmodi ausprobiert, aber hat bei keinem besser geklappt als mit dem ursprünglichen (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
Hmmm also damit würde es klappen, sofern ich das Quad dann 3x hintereinander zeichnen lasse, ansonsten ist es immer noch viel zu dunkel.
Allerdings hab ich da dann das Problem, dass meine weichen Kanten der Textur verschwunden sind. Da gibts also nur noch entweder an oder aus.. woran kann das nun liegen?
Hmmm also damit würde es klappen, sofern ich das Quad dann 3x hintereinander zeichnen lasse, ansonsten ist es immer noch viel zu dunkel.
Allerdings hab ich da dann das Problem, dass meine weichen Kanten der Textur verschwunden sind. Da gibts also nur noch entweder an oder aus.. woran kann das nun liegen?
Zeig mal bitte in Bild wenn es geht!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Also ich hatte mir das so gedacht du hast 2 gleichgroße Bilder:
1 mal die Szehne
1 mal die Beleuchtung
Die Beleuchtung ist ein scharz weises Bild bei dem die Beleuchtung weis ist.
Die Szehne ist das was man sehen würde wenn alles beleuchtet ist.
Wenn du zum Beispiel das Lichtkegel zusammengeblendet hast brauchst du nur noch die gerenderte Szene aus dem Pixelpuffer holen dann mit
Code:
glBlendColor(GL_DST_COLOR,GL_ZERO);
(Hinweis: OpenGL Funktionen im Pascal Code sind hier im Forum für gewöhnlich Links zu einer deutschen Erklärung der Funktion)
OpenGL sagen das es die vorhandene Farbe (GL_DST_COLOR) als Alpha Wert für das was drauf geblendet werden soll verwendet. und die vorhande Farbe nicht mit reinmischen soll (GL_ZERO).(da das weise das nur blass macht)
Der Nachteil vom Pixelpuffer ist das es alles viel langsamer als ohne ist. Aber vielleicht fällt dir ja noch eine Lösung ein.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
würde ich es jetzt gut hinkriegen. Das einzige Problem an der Sache ist jetzt noch, dass wenn sich 2 Lichtquellen überlagern, das ganze viel zu helld wird :/
Das könnte man wohl per PixelBuffer lösen, aber wenn die Performance dadurch so in den Keller geht, würd ich lieber erst mal fragen, ob es da nicht ne andere Möglichkeit gibt ?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Na so viel geht die Performance nun auch mal wieder nicht in den Keller!
Du kannst Pixelbuffer ruhig benutzen, wird vermutlich auch zimlich gut aussehen!
P.s.: Schöner GLOW Effekt!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Oder nimm für die Leuchten kein 100% Weis sondern nur 80% an, und lass sie an den Rändern später ausfaden, dann sollte das gehen....sieht schon ganz gut aus.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
(Hinweis: OpenGL Funktionen im Pascal Code sind hier im Forum für gewöhnlich Links zu einer deutschen Erklärung der Funktion)
Ey cool. Wieso erfahr' ich das erst jetzt? Macht die Funktionsnamen doch noch unterstrichen, wie die normalen Links. Dann würde man das auch sehen, dass die zum Wiki verlinkt sind ^^
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: Bing [Bot] und 18 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.