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

Aktuelle Zeit: Di Jul 08, 2025 20:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GL_BLEND
BeitragVerfasst: Mo Dez 23, 2002 22:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

geht es irgendwie, das man ALLES mit GL_BLEND zeichnet...?

Also, das es wenn ich den Alpha-Wert bei der Farbe auf 1 setzte es genauso aussieht als wäre GL_BLEND ausgeschaltet, und sobald ich den AlphaWert ändere halt dieses Objekt transparent wird..?

Ich hab recht viel rumprobiert eben, aber so ganz klappen will es nicht :(

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 23, 2002 23:04 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Was sppräche dagegen ne IF-Abfrage eintzbauen? Wenn Alpha<1 then glEnable(GL_BLEND);

Denke, dass es das beste sein wird, da man dann auch nicht die Rechenpower umsonst verbrät :)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 23, 2002 23:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
ja, ok... aber, wenn ich als AlphaWert 0.9999 mache müßte es ja im grunde immernochnicht transparent sein...

Aber bei mir schimmern dann IMMER die Objekte die dahinter liegen durch... selbst wenn ich Alpha=1 mache..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 23, 2002 23:28 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Wie ist den die Blending-Funktion die du verwendest? Hört sichb für mich nicht so an, als würde dann der Alpha-Wert auch wirklich verwendet werden (oh no, not more blending problems today 8O )

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 23, 2002 23:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
ich mach's so:

Code:
  1.  &nbsp;glDepthMask(false);
  2.  
  3.  &nbsp;glEnable(GL_BLEND);
  4.  
  5.  &nbsp;glBlendFunc(GL_ONE,GL_SRC_ALPHA);
  6.  
  7. // &nbsp;ObjekteZeichnen
  8.  
  9.  &nbsp;glDisable(GL_BLEND);
  10.  
  11.  &nbsp;glDepthMask(true);


GL_DEPTH_TEST ist immer aktiviert :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 00:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
probier mal

glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA);

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 00:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
leider immernoch dasselbe problem... die objekte im hintergrund schimmern immernoch durch... :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 00:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
auch wenn der alpha wert definitiv bei 1 ist? dann sollten sie dass nämlich nicht tun...

hast mal nen screeny?

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 00:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Jep, auch wenn Alpha = 1 ist... *screen shot macht*

Bei Alpha=0:
Bild

Bei Alpha=1:
Bild

Ohne GL_BLEND:
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 01:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Also...

Wenn Alpha=0 ist, sollte das Objekte meiner Meinung nach komplett unsichtbar sein...

Bei Alpha=0.5 sollte es 50% Transparent sein

und bei Alpha=1 sollte es so sein, als wäre GL_BLEND garnicht aktiviert...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 01:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
mach mal folgendes: setzt den alpha-wert so wie beim 2 screenshot (war das wirklich 1 wie du geschrieben hast? nicht 0?) und schalte dann den Tiefenpuffer ein. Dann solltest du feststellen, das das Blending nicht das Problem ist, sondern der fehlende Tiefenpuffer. Es scheint nämlich gar nix durch, stattdessen werden hintenliegende Flächen über davorliegende Gezeichnet. Beim vollen Blending nicht schlimm - in anderen Fall aber schon.

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 24, 2002 01:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
mhhh...

hab es jetzt so hinbekommen:
Bild

Das Kreuz hat jetzt nen AlphaWert von 0,25... wird an und für sich auch richtig gezeichnet... nur jetzt schimmert der dahinterliegende Torus nichtmehr durch.. *g*

Den Tiefentest hab ich dabei diesmal nicht abgeschaltet..

Wie bekomm ich das jetzt hin? :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 05:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
mhh.... weiß keiner was??? :cry:

Selbst wenn ich das Kreuz als letztes zeichne.. nehmen wir mal an das beide Objekte einen Alpha-Wert von 0,5 haben.

Jetzt render ich zuerst den Torus dann das Kreuz, dann kann man durch das Kreuz hindurch den Torus sehen, wenn ich nun aber in meiner Szene rumlaufe und aus richtung des Torus' auf das Kreuz schaue, verdeckt dieser das Kreuz...

kann man da nichts gegen machen??? muß doch irgendwie gehen *seufzt*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Jetzt render ich zuerst den Torus dann das Kreuz, dann kann man durch das Kreuz hindurch den Torus sehen, wenn ich nun aber in meiner Szene rumlaufe und aus richtung des Torus' auf das Kreuz schaue, verdeckt dieser das Kreuz...

kann man da nichts gegen machen??? muß doch irgendwie gehen *seufzt*


Nein...da kann man OpenGL-technisch nix dagegen machen.Blending läuft auf Pixelebene und nicht wie z.B. Alpha-Testing auf Fragmentebene ab.

Du musst deine Objekte halt anhand ihres Z-Pufferwertes von Hand sortieren, und zwar von hinten nach vorne (nennt sich Depth-Sorting und wird u.a. bei BSP-Bäumen verwendet, die deshalb auch keine Probs mit Blending haben)...eine andere Möglichkeit gibt es nicht!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 06, 2003 19:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 10:50
Beiträge: 42
Wohnort: [Auch diese Steine können Sie klauen...]
Hi Aya,

vielleicht gibt es doch noch eine relativ einfache Lösung für dich. Die Lösung nennt sich PolygonStipple. Sieht zwar nicht super aus, kostet dich dafür aber 0(!) Performance.

Prinzip ist folgendes: Bevor du deinen Torus renderst, aktiviere das PolygonStippling. Nehme dafür eine Halftone-Mask, oder je nach Geschmack auch ein bisschen durchlässiger (sieht dann aber nicht mehr so toll aus. Außerdem solltest du bedenken, dass sich PolygonStippling auch auf die Lichtverhältnisse auswirkt, je mehr Durchlass, desto weniger hell scheint das Objekt).
Nach dem Rendern des Torus deaktivierst du das PolygonStippling wieder.
Objekte, die mit oder ohne Blending gerendert wurden, scheinen jetzt durch, da ja nur jeder 2.Punkt (bei einer HalftoneMask) gezeichnet wird.
Das schöne ist dabei, dass die Z-Order keine Rolle mehr spielt.
Der Nachteil ist aber, dass es bei deinem Torus sein kann, dass dummerweise die vordere und hintere Seite sich vollkommen überdecken. Die Halftone-Mask ergänzt sich dann quasi zu einer "FullToneMak", und der Effekt ist hinüber.
Ich habe das aber eben mit einem texturierten Cube ausprobiert und das hat hervorragend geklappt. Vielleicht klappt es ja bei dir auch.

Gruß


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.009s | 15 Queries | GZIP : On ]