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

Aktuelle Zeit: Fr Jul 18, 2025 00:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem bei Lesson7 (Blending)
BeitragVerfasst: So Aug 03, 2003 21:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Hallo zusammen!

Ich habe ein Problem bei der Lesson7! Und zwar funktioniert bei mir das Blending nicht so wie es dort beschrieben wurde bei der Schwarz/Weiss Maske!

Also das geht:
glBlendFunc(GL_ONE,GL_DST_COLOR);

Obwohl ich da auch auf den weissen flaechen noch von der Textur sehe, einfach nur sehr fein...
Aber das geht nicht:
glBlendFunc(GL_ZERO,GL_SRC_COLOR);

Den Tiefentest hab ich deaktiviert und das blending ist auch an.. alle anderen Beispiele funktionieren auch ohne Probleme! Nur wenn ich "weiss" mappen will funktionierts nicht!

Ich hab ne Radeon97k und habs auch schon mit anderen Grakas ausprobiert.. funzte nirgens :/

Any clue?

Gruss
Joel

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 03, 2003 22:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Beschreib mal das was du mittels Blending erreichen willst genauer, und poste mal ein paar Screenshots zu deinem Problem.Evtl. lässt sich das was du willst nämlich auch einfacher und leistungssparender mittels dem Alphatest lösen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 03, 2003 22:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Ohjemine ich bin ein wenig verwirrt.. jetzt hats irgendwie doch geklappt (ich habs echt ewig ausprobiert..). Ich sollte glaubs besser ins Bett und das ganze morgen nochmals genauer studieren ;).

Phobeus: Es waere vielleicht noch gut etwas ueber die Mathematik zu sagen.. es ist eigentlich ja gar nicht so schwer wenn man vielleicht eine kleine Hilfe zum Vorstellen hat!

Wie ich das verstehe (auf einen Pixel angewendet):

"Alles" (GL_ONE):
1,1,1,1 = 1 x (Wert von rot) + 1 x (Wert von blau) + 1 x (Wert von gruen) * 1 (Sichtbarkeit)

"Nichts" (GL_ZERO):
0,0,0,0 = 0 x (Wert von rot) + 0 x (Wert von blau) + 0 x (Wert von gruen) * 0 (Sichtbarkeit)

"Invert" (GL_ONE_MINUS_SRC/DST_COLOR):
1,1,1,1 -> 1 - (Wert von rot) + 1 - (Wert von blau) + 1 - (Wert von gruen) * (1 - Sichtbarkeit)

Interpretiere ich das in etwa richtig? Die Liste geht natuelrich weiter, aber ich sollte pennen ;).

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 03, 2003 22:20 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
An sich ist das richtig (wenn meine Müden Augen noch Funzen, aber kommt der Grün-Wert nicht vor dem Blau-Wert? (es heißt doch RGBA)

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 03, 2003 22:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schau dir mal das entsprechende Kapitel im Redbook an (Thema Blending).Dort gibts ne schöne Tabelle, in der genau das erklärt wird :

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 09:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Ok, ich habs nochmals angeschaut und kann meine Frage nun hoffentlich besser formulieren ;)

Also. Ich habe 2 Texturen:

Textur 1: Felsen
Textur 2: Map (Alles weiss und schwarzer Punkt in der mitte)

Ok, nun haue ich die Textur 1 aufn Screen, mach ein blending mit:
GL_DST_COLOR, GL_ZERO

und schmeiss die 2te Textur hintennach.

Was ich kriege ist, dass alles ehemals weisse die Textur angenommen hat, und das schwarze schwarz bleibt.

Hm. Ok. Das ganze verstehe ich jetzt aber nicht ganz ;).

Nehmen wir mal den allerersten Pixel (0,0) der sicherlich weiss sein wird (weil der schwarze Punkt ja in der Mitte ist) und schauen das Blending an:

GL_DST_COLOR:
Hier wird also der "braune"-Pixel (von der Erde/dem Gestein, logisch oder?) mit dem weissen Pixel von der Map addiert und durch 2 geteilt. Auf gut deutsch ist das soviel wie "Braun" + "nichts" (da weiss ja 0,0,0,0 ist) durch 2. Gibt ein hellbraun nehm ich mal an. Also die weisse Flaeche wird Mocca (mh, Kaffee).

Das ganze wird addiert mit
GL_ZERO:
Hier wird die Textur welche man draufmappen will, ge'NULLT.. also man hat eigentlich nix mehr davon. Weisse Flaechen werden mit 0 multipliziert sowie schwarze.. also gibts ein einheitliches 0 das dazu addiert wird. Sprich nichts. Es bleibt also beim hellbraunen Moccakaffee...

Ok, jetzt gehen wir mal mitten in die Map rein, sagen wir voll in die Mitte wo sicherlich der Schwarze Punkt sich befindet und schauen das Blending an:

GL_DST_COLOR:
Hier wird wieder ein "brauner" Pixel mit schwarz addiert und durch 2 geteilt. Gibt IMHO ein dunkelbraun (an was mich das erinnert wollt ihr nicht wissen ;)).

GL_ZERO:
Hier eigentlich dasselbe wie oben.. es bleibt beim dunkelbraun...

-----------------------------
Das ist so wie ich das verstehe.. allerdings ist die schwarze Flaeche ja richtig schwarz? Oder verstehe ich hier was falsch? Oder war ich undeutlich?

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 10:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Die Mathematik hinter OpenGLs Blending ist manchmal recht kompliziert, zumal du ja auch darauf achten musst als welchen Parameter du das Blending-Argument übergibst (sfactor/dfactor).

Allerdings wäre deinem Problem evtl. weitaus einfacher mittels Multtexturing beizukommen, welches nicht nur einen erheblichen Geschwindigkeitsvorteil, sondern auch weitaus mehr Blendmöglichkeiten mitbringt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 10:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Hmm.. aber ich habs doch schon richtig verstanden? So rein theoretisch ;).

Also wird Blending mehr bei Spezialeffekten (Partikeln etc.) gebraucht und Multitexturing bei Flaechen? Gibts fuer Multitexturing auch schon n'Tut hier?

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
tr0nix hat geschrieben:
Hmm.. aber ich habs doch schon richtig verstanden? So rein theoretisch ;).

Ja, und das ist schonmal ein wichtiger Schritt.Allerdings sollte man Blending halt nur da verwenden wo es auch nötig ist.

tr0nix hat geschrieben:
Also wird Blending mehr bei Spezialeffekten (Partikeln etc.) gebraucht und Multitexturing bei Flaechen? Gibts fuer Multitexturing auch schon n'Tut hier?

Mit Multitexturing kann man ja nur mehrere Texturen auf eine primitive in einem Durchgang zeichnen, weshalb man für geblendete Dinge im freien Raum wie z.B. Partikel oder transparente Objekte auf Blending ausweichen muss.
Will man allerdings (so wie du) nur eine Fläche mit mehreren Texturen belegen, sollte man auf jeden Fall die Multitexturing-Fähigkeiten der Grafikkarte (ist seit der RivaTNT Standard) nutzen.
Auf meiner HP gibts auch ein recht kurzes Tutorial zum Thema Multitexturing, welches aber nicht genauer auf die diversen Blendfunktionen eingeht, da dies zahlreich sind und auch für verschiedene Zwecke (z.B. BumpMapping) entwickelt wurden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 12:49 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
tr0nix hat geschrieben:
Ok, ich habs nochmals angeschaut und kann meine Frage nun hoffentlich besser formulieren ;)

Also. Ich habe 2 Texturen:

Textur 1: Felsen
Textur 2: Map (Alles weiss und schwarzer Punkt in der mitte)

Ok, nun haue ich die Textur 1 aufn Screen, mach ein blending mit:
GL_DST_COLOR, GL_ZERO

und schmeiss die 2te Textur hintennach.

Was ich kriege ist, dass alles ehemals weisse die Textur angenommen hat, und das schwarze schwarz bleibt.

Hm. Ok. Das ganze verstehe ich jetzt aber nicht ganz ;).

Nehmen wir mal den allerersten Pixel (0,0) der sicherlich weiss sein wird (weil der schwarze Punkt ja in der Mitte ist) und schauen das Blending an:

GL_DST_COLOR:
Hier wird also der "braune"-Pixel (von der Erde/dem Gestein, logisch oder?) mit dem weissen Pixel von der Map addiert und durch 2 geteilt. Auf gut deutsch ist das soviel wie "Braun" + "nichts" (da weiss ja 0,0,0,0 ist) durch 2. Gibt ein hellbraun nehm ich mal an. Also die weisse Flaeche wird Mocca (mh, Kaffee).

Das ganze wird addiert mit
GL_ZERO:
Hier wird die Textur welche man draufmappen will, ge'NULLT.. also man hat eigentlich nix mehr davon. Weisse Flaechen werden mit 0 multipliziert sowie schwarze.. also gibts ein einheitliches 0 das dazu addiert wird. Sprich nichts. Es bleibt also beim hellbraunen Moccakaffee...

Ok, jetzt gehen wir mal mitten in die Map rein, sagen wir voll in die Mitte wo sicherlich der Schwarze Punkt sich befindet und schauen das Blending an:

GL_DST_COLOR:
Hier wird wieder ein "brauner" Pixel mit schwarz addiert und durch 2 geteilt. Gibt IMHO ein dunkelbraun (an was mich das erinnert wollt ihr nicht wissen ;)).

GL_ZERO:
Hier eigentlich dasselbe wie oben.. es bleibt beim dunkelbraun...

-----------------------------
Das ist so wie ich das verstehe.. allerdings ist die schwarze Flaeche ja richtig schwarz? Oder verstehe ich hier was falsch? Oder war ich undeutlich?


Ich glaube, hier stechen ne Menge Fehler drinne (wenn ich micht nicht irre):

Zunächst mal: Es werden keine durchschnitswerte gebildet (addiert und danch durch 2 geteilt), sondern die Werte werden Multipliziert!

Des weiteren ist Weiß nicht (0,0,0,0), sondern (1,1,1,1) (Schwarz ohne Transparenz ist (0,0,0,1) )...

Da bedeutet für dein Problem:
An den Kanten, wo ja die zweite Textur "weiß" ist, da dürften alle Farbwerte mit "1" multipliziert werden, was bewirkt, dass sie 1:1 übernommen werden... In der Mitte, wo ja dein schwarzer Punkt ist, wird halt mit "0" multilpiziert und alles, was du mit "0" malnimmst wird "0"...daher der Schwarze Punkt in der Mitte beim Endergebniss...
Die DST-Textur hat insofern keinen einfluss, da sie ja dank "glzero" ja gar nicht ins Endergebniss einfließt, sondern in diesem Falle ja nur die Multiplikatoren für die Source-Farbwerte bereitstellt (gl_dst_color) ....

Oder habe ich nun irgendwas ganz falsch verstanden?

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 12:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Also jetzt wuerd's fuer mich Sinn machen ;) k00l! Danke..

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 17 Queries | GZIP : On ]