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

Aktuelle Zeit: Fr Jul 18, 2025 12:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Einfache Frage zum Blending
BeitragVerfasst: Di Jan 17, 2006 09:32 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Hi,

ich versuche gerade, Blending zu verstehen. Das TUT vom Phobeus hab ich durch.
Folgende Problemstellung: Ich habe zwei Quadrate, die hintereinander angeordnet sind. Verschiedene Farben und je 0.5 Alphawert.
Nun drehe ich Szene dauerhaft, aber langsam genug, um alles zu sehen.
Meine Blending-Einstellung sind diese:
(Der Standard eben, und Tiefentest ist aktiviert)
Code:
  1.   glEnable (GL_BLEND);
  2.   glBlendFunc (GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);

Folgendes passiert:
Solang das erstgemalte Quadrat hinten ist, wird geblendet, man sieht es durch das zweite, wie durch ein Fenster.
ABER: Sobald das erstgemalte vorn ist, wird nicht geblendet, sondern komplett überdeckt.

Das erstgemalte überdeckt also das zweitgemalte. Liegt das daran, dass es weiter hinten ist? Ich kann doch aber nicht jedesmal alle hintengemalten nach vorn ziehen, wenn ich blenden will?
Vielleicht klärt mich jemand auf *gg*

Viele Grüße,
Wulfi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 09:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wenn ich das richtig verstanden habe hast du mit deiner Aussage vollkommen recht. Um das ganze aber mal ein Wenig zu verdeutlichen. Alle aktionen werden sofort im Framebuffer umgesetzt. Also zeichne eine Fläche. Dann ist sie auch schon drin.

Da aber manchmal Objekte von anderen Objekten verdeckt werden gibt es einen Tiefenbuffer. Der sorgt dafür, dass nur Objekte mit einer kleineren Tiefe gezeichnet werden. Dadurch hast du zum Beispiel die Möglichkeit zu erst eine Pflanze und anschließend die Wand dahinter zu Rendern. Beim Blending werden aber immer ganze Flächen gezeichnet. Zu mindest in den Tiefenbuffer. Selbst wenn diese einen Alpha von 0 haben. Und genau dann schlägt der Tiefentest zu. Obwohl du durch deine Fläche hindurch sehen kannst und eigentlich das dahinter sehen müsstest wird es nicht gezeichnet.

Den Tiefentest zu deaktivieren und alle Flächen so zu zeichnen wie sie gerendert werden kann in machen Fällen bereits helfen. Aber je nach Blendmodus würde das aber zu einem vollkommen falschem Ergebniss führen. Weswegen man ein wenig vorsichtig damit sein sollte. Wenn das aber nicht geht bleibt dir nichts anderes übrig als alle transparenten Flächen nach der Tiefe zu sortieren. Wenn es da mittweile keine neueren Techniken dafür gibt ist das durchaus üblich und wird in ausnahmslos allen Spielen gemacht. Bin aber nicht so der Guru bei solchen Dingen.

Bei einem Würfel habe ich auch schon mal einen Trick gesehen der dürfte in deinem speziellen Fall sogar auch funktionieren. Und zwar wurde dort nicht nur ein würfel gezeichnet sondern 2. Zu erst wurden alle Innenflächen gezeichnet. Die waren logischerweise hinten und dann alle Außenflächen. Wichtig dabei darfst du keine doppelseitigen Flächen benutzen. Bei dir würde das so aussehen, dass du 4 Flächen zeichnenen müsstest. Also zu erst die die sich anschauen und dann die voneinander wegzeigen. Je nach Blickwinkel siehst du immer zu erst eine hinterfläche und anschließend eine Vorderfläche. Evtl wird es dann noch notwendig den Tiefentest (glDisable(GL_DEPTH_TEST)) oder das schreiben des Tiefenbuffers (glDepthMask(GL_FALSE)) zu deaktivieren/unterbinden.

Ach ja. Das glDepthMask sorgt dafür, dass gezeichnete Flächen nicht mehr im Tiefenbuffer aufgenommen werden sich aber dennoch an bereits gezeichneten Orientieren. Das wird ganz gerne für Partikelsystem eingesetzt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 11:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du solltest deine Szene Tiefensortiert zeichnen. Das wirst du später noch brauchen (bei komlexeren Szenen). Wichtig ist dann, dass du zusätzlich wärend du die transparenten Flächen zeichnest, auch noch den Tiefentest deaktivierst. Damit kannst du ein paar Spezialfälle ausmerzen. Aber solche Sachen wie 2 Flächen die sich Kreuzweise schneiden, sind immer noch ein Problem.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 13:16 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Okay,
ich danke euch für die Antworten.
Ich fasse mal zusammen:
1) Tiefensortiert zeichnen/rendern
2) depth_test abschalten.

Dann muss ich wirklich selber sortieren? Das kann doch mitunter total schwierig werden (Winkel, dynamische Objekte, etc.)...

Ist denn der Tiefenpuffer winkelabhängig? Eigentlich ja nicht, da er ja nur beschrieben wird, wenn die Szene am Rendern is, also der Tiefenpuffer vom 3D-Raum nichts weiß...

Grüße,
Wulfi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 13:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nö. Der Tiefenpuffer ist eine einfache Matrix die die ausmaße deiner Ausgabe hat. Um zu kapieren wie er funktioniert einfach mal hier gucken: http://wiki.delphigl.com/index.php/Tiefenpuffer

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 13:48 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Flash hat geschrieben:
Nö. Der Tiefenpuffer ist eine einfache Matrix die die ausmaße deiner Ausgabe hat. Um zu kapieren wie er funktioniert einfach mal hier gucken: http://wiki.delphigl.com/index.php/Tiefenpuffer

Genau das habe ich doch gemeint^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 13:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nur nochmal um das mit dem Winkelabhängig ganz klar zu stellen.
"Der Tiefenpuffer ist quasi ein Abbild deiner Szene, nur ohne farben."

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 13:59 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Vielen Dank,

das bestätigt meine Vermutung.
Aber die Zweifel und alles andere habt ihr bereits aus dem Weg geräumt... Danke dafür! :!:


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


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]