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

Aktuelle Zeit: Di Jun 04, 2024 15:11

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bildausgabe kurz aufhellen
BeitragVerfasst: Sa Jun 23, 2012 10:04 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Hallo,

ich programmiere zur Zeit ein kleines 2d-Spiel mit OpenGL. Nun möchte, dass, sobald sich der Ausgang eines Levels öffnet, sich das Bild kurz aufhellt. Mit SDL ohne OpenGL hatte ich diesen Effekt mit Hilfe von Scanlines selbst implementiert. Bietet OpenGL dafür schon eine fertige Lösung? Ich dachte eventuell an glColor3f. Vielen dank schonmal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Sa Jun 23, 2012 10:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Rendere einfach ein weißes, billschirmfüllendes Quad mit aktiviertem Alpha-Blending als letztes über deine Szene.

Für den Alpha-Wert benutzt du smoothstep, dann sieht das auch gut aus :)


edge0 = Startzeit
edge1 = Endzeit
x = aktuelle Zeit

Code:
  1. float smoothstep(float edge0, float edge1, float x)
  2. {
  3.     // Scale, bias and saturate x to 0..1 range
  4.     x = clamp((x - edge0)/(edge1 - edge0));
  5.     // Evaluate polynomial
  6.     return x*x*(3 - 2*x);
  7. }

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 00:29 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Vielen Dank Coolcat! Hab nun dank Dir sowohl das Aufhellen als auch Smoothstep erfolgreich implementiert.
:D
Code:
  1. DrawScene;
  2.  
  3. glEnable(GL_BLEND);
  4. glColor4f(1,1,1,AlphaValue);
  5. glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  6. BindTexture('white.bmp');
  7. DrawQuad;
  8.  
  9. glColor4f(1,1,1,1); //Farbwert zurücksetzen, notwendig?
  10. glDisable(GL_BLEND);
  11.  


P.S. : Sorry für die verspätete Antwort. Habe zur Zeit Probleme mit meiner Internetverbindung :-(

Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 08:47 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Wieso benutzt du eine weiße Textur? Wenn du die Farbe auf weiß setzt und glDisable(GL_TEXTURE_2D) aufrufst brauchst du das nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 15:37 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Markus hat geschrieben:
Wieso benutzt du eine weiße Textur?

Weil ich's nicht besser wusste. Ich dachte, fürs Blending, brauche ich zwei Texturen, auch wenn eine von beiden nur weiss ist. Wusste nicht, dass es auch ohne geht. Danke für den Hinweis, an glDisable(GL_TEXTURE_2D) habe ich nicht gedacht.

Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 17:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hm, für Blending brauchst du garkeine Texturen. Also auch keine zwei. Mal kurz eine Erläuterung wie Blending funktioniert (das ist nämlich was anderes als Multitexturing):

Wenn du ein Quad zeichnest ohne Blending, ersetzt OpenGL einfach die betreffenden Pixel auf dem Bildschirm⁽¹⁾ mit denen des neuen Quads. Das ist der einzige Aspekt den Blending tatsächlich verändert. Es schaltet nämlich von diesem Ersetzen-Verhalten auf ein Verrechnen-Verhalten um. Dabei wird durch die glBlendFunc entschieden, wie die bereits vorhandenen (DST) Pixel mit denen des neuen Quads (SRC) gemischt werden.

Damit ist es vollkommen egal ob das Quad eine (oder mehrere) Textur hat, eine einfache Farbe oder gar aufwendig von einem Shader bemalt wurde.

Bei Multitexturing verrechnest du mehrere Texturen um die Farben des Quads zu bestimmen. Die Art der Verrechnung wird durch glTexEnv bestimmt. Für mehr Infos siehe das verlinkte Tutorial.

⁽¹⁾: oder wohin auch immer du zeichnest…

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Zuletzt geändert von Lord Horazont am Fr Jun 29, 2012 13:40, insgesamt 2-mal geändert.
Noch so ein kaputter Link.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 19:44 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Warte... ist es nicht so das wenn man eine Textur per Shader zeichnet die Shader eingeschaltet sein müssen und die Blending-Funktion von OpenGL deaktiviert wird? Oder bleibt der Teil der Pipeline der sich um die Pixel kümmert aktiv wenn man NUR einen Vertexshader (gegebenenfalls Geometrieshader dazu) aktiv hat?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 20:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Shader und Blending sind einfach nur Teile der Pipeline und völlig unabhängig voneinander.

Bild

Zitat:
Oder bleibt der Teil der Pipeline der sich um die Pixel kümmert aktiv wenn man NUR einen Vertexshader (gegebenenfalls Geometrieshader dazu) aktiv hat?

Es ist möglich nur einen Vertexshader zu benutzen, dann springt allerdings die alte Fixed-Function-Pipeline als Fragmentshader ein. Es ist aber auch möglich die Pipeline direkt nach dem Primitive-Assembly-Schritt abzuschalten. Dies macht man dann wenn man die Primitive-Daten via Transform-Feedback abgreifen will und sich nicht für Rendering interessiert. Mehr dazu im Wiki unter Transform-Feedback.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Do Jun 28, 2012 23:16 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Danke für die Erläuterung Lord Horazont. Der große Fehler war, dass ich das Texturing nicht deaktiviert habe. Dadurch wurde beim Blending die zuletzt verwendete Textur verwendet, wodurch natürlich nicht der gewünschte Effekt auftrat. Es kam mir ehrlichgesagt schon etwas komisch vor, eine weiße Textur zu verwenden. War gut, dass ich meinen Code hier gepostet hab. Vielen Dank nochmal für die Korrektur :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Fr Jun 29, 2012 13:26 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Das binden der Textur mit der ID=0 hat einen ähnlichen Effekt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bildausgabe kurz aufhellen
BeitragVerfasst: Fr Jun 29, 2012 13:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Binden der Textur-ID 0 ist genaugenommen das entbinden einer Textur. Weiß jemand ob das Verhalten in dem Falle mit aktiviertem GL_TEXTURE_2D spezifiziert ist? Oder ist das eine Fehlerbedingung?

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 networkmy 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


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


Wer ist online?

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.

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