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

Aktuelle Zeit: Di Okt 04, 2022 01:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: TextSuite und Framebuffer Problem
BeitragVerfasst: Mi Dez 01, 2021 17:33 
Offline
DGL Member

Registriert: Mo Jul 17, 2006 13:16
Beiträge: 69
Hallo,
ich mal wieder mit meinem Framebuffern... :lol:

Ich habe jetzt alles mögliche ausprobiert und all meine Technikdemos soweit reduziert, dass ich mir ziemlich sicher bin, dass es irgendein Bug von TextSuite 2.0 in Verbindung mit Framebuffern ist:

Ich habe einen Text, der eine Umrandung und einen Schlagschatten hat. Dank Textsuite alles kein Problem - sieht echt super aus.

Sobald ich jedoch die selbe Renderprozedur ohne weitere Änderungen als das Binden, spätere Unbinden und Renderm (m)eines FrameBuffers (FBO) laufen lasse,
bleibt von der Umrandung und dem Schlagschatten leider nicht mehr viel übrig:
Dateianhang:
FBO_Problem_Textsuite.png


Das Problem habe ich soweit zurückverfolgt, dass es scheinbar (nur?) mit den Postprocessoren TtsPostProcessorBorder und TtsPostProcessorShadow zusammenhängen könnte, da der eigentliche Text ja korrekt gezeichnet wird (vielleicht aber auch nur, weil der Text zu 100% Deckend ist...).

Man könnte vermuten, dass das Problem -wie bei anderen meiner früheren Beiträge- vielleicht etwas mit dem Alpha-Wert des FBO zu tun hat, aber selbst wenn ich den Framebuffer als Textur exportiere sieht das nicht richtiger aus, es ist "also schon im FBO falsch".

Für meine Framebufferprobleme habe ich gelernt, dass ich mit
Code:
  1.     glColorMask(False, False, False, True);
  2.     glBlendEquation(GL_MAX);

erst das Objekt rendern muss, um die Alpha-Maske zu stanzen,
dann mit
Code:
  1.     glBlendEquation(GL_FUNC_ADD);
  2.     glColorMask(True, True, True, False);

in den tatsächlichen Zeichenmodus gehe, und zum Schluß wieder Alles erlauben mit
Code:
  1.     glColorMask(True, True, True, True);
  2.  


Das mache ich so auch hier; die Textsuite rendert also zweimal (1x nur Alpha, 1x Nur RGB). Auch wenn ich es normal rendere (RGBA in einem Durchlauf) ändert das nichts.

Die Postprozessoren sind mir leider zu hoch; ich verstehe nicht wie sie arbeiten und was ich im Quelltext versuchen könnte.

Das einzige was ich mir aktuell Denke, ist dass die Zeichenprozedur der PostProzessoren eine andere/falsche glBlendFunc ( https://wiki.delphigl.com/index.php/glBlendFunc ) verwendet, bzw. die selbe glBlendFunc sich beim direkten Zeichnen in den Backbuffer anders auswirkt, als beim Zeichnen in den FrameBuffer. Im Backbuffer liegt das 100% Alpha-deckende Raster - 70% Text-Schatten drauf = 30% Hintergrundraster sichtbar. Der Framebuffer hat noch keine Alpha-Deckung, nun wird er durch den Schatten 70% deckend gestellt - sollte doch klappen oder nicht? Ich habe halt das Gefühl, er wendet die 70% "Deckkraft" vom Schatten auf die 0% Deckkraft des Framebuffers an = 0% gesamt...?

NACHTRAG:
Ja, es hat quasi damit zu tun. Die Postprozessoren suchen aber nicht explizit nach dem Alpha, sondern [auch] nach der Pixelfarbe. Hier kommt es enorm drauf an, ob der FrameBuffer mit glClearColor(0, 0, 0, 0) = Schwarz ohne Deckkraft oder glClearColor(1, 1, 1, 0) = Weiß ohne Deckkraft initialisiert wurde. Bei Weiß ist der Schattenwurf minimal, bei Schwarz (oder einer Textur im Hintergrund) korrekt. Leider kann ich den FBO nicht pauschal immer mit Schwarz initalisieren, weil dann irgendwas mit die Darstellung von Texturen mit Alpha falsch ist (50% Transparentes Rot = dreckiges, durchsichtiges Dunkelrot).

Long Story short: Zeichne ich Text auf einen transparenten Bereich, muss ich schwarz drunter legen, sonst klappt es nicht. Zeichne ich Text auf den Teil des FBO, in dem schon eine Grafik liegt, darf das nicht sein. Woher soll ich nun wissen, ob unter jedem Pixel meines Textes ein Bild ist, oder nicht?

Hat jemand eine Idee?

Danke!


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


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.013s | 19 Queries | GZIP : On ]