Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 20, 2025 00:37

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Sep 24, 2005 20:11 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 24, 2005 22:27 
Offline
DGL Member
Benutzeravatar

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.

http://www.delphigl.com/script/do_show. ... b&action=2

MfG
Flo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 14:12 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 17:42 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

danke für eure Antworten!

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).

Ich hoffe ihr habt noch ein paar Ideen.

Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Diese Funktionen könnten noch sinnvoll sein:

glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR)
glBlendFunc(GL_DST_COLOR,GL_ONE)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 17:52 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 18:18 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Passi hat geschrieben:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 18:27 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Sieht dann so aus.. dabei möchte ich es eben an den Enden ausfaden lassen..


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 25, 2005 18:31 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2. glBlendColor(GL_DST_COLOR,GL_ZERO);
  3.  

(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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 15:23 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hmm also mit dem hier vorgeschlagenen Blendmodus

Code:
  1. glBlendFunc(GL_DST_COLOR,GL_ONE)


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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 15:32 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
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! :mrgreen:

_________________
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 16:34 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 28, 2005 21:14 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Flo hat geschrieben:
(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'."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]