Registriert: Mi Aug 20, 2003 22:26 Beiträge: 38 Wohnort: Dresden (noch)
Ich hatte gerade mal überlegt, wie ich möglichst schnell aber immernoch gut aussehend in meinem 2D-Shooter eine Art Glüheffekt (also prinzipiell ein Dynamic Light in 2D) um meine Geschosse bekomme.
Letztlich soll also eine Glühtextur den schon gerenderten texturierten Quads (Schiffe, etc.) hinzugefügt werden, so dass es aussieht, als wäre es farbig beleuchtet, wobei der Hintergrund jedoch unberührt belassen werden soll.
Problem 1 - Hintergrund-Vordergrund-Trennung: - Ich verwende gestaffelte 2D-Layer. Man könnte den DepthTest auf GL_EQUAL stellen damit das Licht nur auf Objekte in der gleichen Tiefe kommt, aber ich glaube nicht, dass das gut funktioniert.
- Mit StencilTest ginge es auch, aber dann müsste ich wohl erst den Hintergrund rendern, dann mit glClear den Stencilbuffer leeren bevor ich weiterrendere. Weil der Vordergrund teilweise Halbtransparent ist, muss der Hintergrund auf jeden Fall zuerst drauf.
Problem 2 - Blending: - Multitexutring fällt wegen der vielen Lichter schon einmal weg.
- glBlendFunc hat wohl keine Möglichkeit, multiplikativ zu blenden und wenn ich Additiv blende, sieht das bei hellen Texturen blöd aus.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zu Problem 1 :
Nachdem die alle Objekte gezeichnet und beleuchtet hast, zeichnest du erst den Hintergrund. Dank des Z-Buffers macht das dann ja keine Probleme und dadurch wird er auch nicht durchs Blending verändert.
Zu Problem 2 :
Edit : Probiers besser mal mit glBlendFunc(GL_ONE_MINUS_DEST_ALPHA, GL_SRC_COLOR)
Registriert: Mi Aug 20, 2003 22:26 Beiträge: 38 Wohnort: Dresden (noch)
Ok die ganzen möglichen Kombinationen bei glBlendFunc und ihre Auswirkungen kenne ich noch nicht so wirklich auswendig, aber wenn du es sagst, dann probiere ich es mal... danke!
Wenn ich den Hintergrund danach zeichne, dann kann ich aber glaube ich kaum noch etwas drüberblenden, was ich meistens mit glBlendFunc(GL_SRC_ALPHA,GL_ONE) mache.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Diese Tool lässt dich mit den verschiedenen Blendfaktoren rumprobieren. So hast du ganz schnell genau den Modus gefunden den du suchst.
Und die Sache mit der Trennung Hintergrund/Vordergrund würde ich dann evtl. über RenderToTexture (am besten Pixelpuffer) machen, dann kannst du viele Problem umgehen, da du dann quasi zwei total unterschiedlich manipulierbare Ebenen hast, bei nem Pixelpuffer sogar mit eigenem Kontext.
Registriert: Mi Aug 20, 2003 22:26 Beiträge: 38 Wohnort: Dresden (noch)
Dieses Tool ist zwar etwas fehlerhaft, da man stehts keine Ausgabe mehr bekommt sobald der SourceFactor auf GL_ZERO steht, aber trotzdem wirklich nicht schlecht!
Auf jeden Fall hatt es bewirkt, dass ich über die ganze Sache noch einmal gründlich nachdenken musste und jetzt endlich das Blendingprinzip richtig verstanden habe.
Hätte ich mal ein Tutorial gefunden das lediglich gesagt hätte:
Der neue Farbwert wird mit dem SourceFactor multipliziert, der Framebufferinhalt wird mit dem DestFactor multipliziert und dann wird das ganze addiert
...dann hätte ich es auch schneller verstanden.
Alle Tutorials die ich gefunden hatte haben entweder versucht, in Tabellen die unübersichtliche Blendinggleichung in allen Kombinationen darzustellen, oder wollten es gleich ganz einfach machen und haben sich in tausend Beispielen verrannt... schade eigentlich.
Zuletzt geändert von Brainiac am So Jan 18, 2004 18:38, insgesamt 2-mal geändert.
Das ist immer so eine Sache - Verstehen tut man meist, wenn man etwas selbst ausprobiert, oder sich eine Weile damit beschäftigt - und dann scheint alles plötzlich ganz einfach und logisch.
Ich glaube nicht, dass du hier den Tutorials Schuld geben solltest, und bin mir fast sicher, dass dir vor einigen Wochen deine eigene Erklärung auch nicht weiter geholfen hätte (ist jetzt wirklich nicht böse gemeint )
Registriert: Mi Aug 20, 2003 22:26 Beiträge: 38 Wohnort: Dresden (noch)
Ich wollte doch keine Schuld zuweisen... ich finde die Tutorials hier generell so ziehmlich die besten zum Thema OpenGL. Nebenbei wäre es auch unsinnig, einer freiwillig und lediglich als Hilfe ins Netz gestellten Erklärung für so etwas die Schuld zu geben.
Hätte ich meinen Satz gelesen, wäre es mir natürlich nicht gleich wie Schuppen von den Augen gefallen, aber ich find's halt nach wie vor schade, dass ich es noch nirgendwo so richtig auf den Punkt gebracht gesehen habe.
Mitglieder in diesem Forum: Majestic-12 [Bot] und 6 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.