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.
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.
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 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
Zuletzt geändert von Lord Horazont am Fr Jun 29, 2012 13:40, insgesamt 2-mal geändert.
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?
Shader und Blending sind einfach nur Teile der Pipeline und völlig unabhängig voneinander.
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.
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
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 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
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.