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

Aktuelle Zeit: Di Jul 15, 2025 16:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 04:04 
Offline
DGL Member
Benutzeravatar

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

ich hab nen kleines Problemchen...

wenn ich eine Textur habe die z.B. einen Farbverlauf von Weiß->Schwarz darstellt mit glBlendFunc(GL_ONE,GL_ONE) benutze, wird das Schwarze Transparent und weiß ist voll sichtbar...

Ist auch alles richtig so, nur wenn ich jetzt ein glColor3f(1,0,0) mache, wird ja das weiße von der Textur rot, und somit wird es auch beim Blending leicht transparent.

Ist ja an und für sich richtig, nur.. für meine Zwecke total ungeeignet :(

Deswegen, gibt es ne möglichkeit das er das glColor3f beim Blending evtl einfach ausser acht lässt oder sowas in der Art???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 09:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Probiers mal mit <a href='http://www.3dlabs.com/support/developer/GLmanpages/glblendfuncseparateext.htm' target='_blank'>glBlendFuncSeparateEXT</a> oder <a href='http://www.3dlabs.com/support/developer/GLmanpages/glblendcolorext.htm' target='_blank'>glBlendColorEXT</a>.
Die enthalten eine ggü. glBlendFunc erweiterte Funktionalität im Bezug auf die Auswertung der Farb/Alphafaktoren und könnten in deinem spezifischen Falle hilfreich sein.Die für diese Funktionen benötigten Extensions werden ab der Radeon8500/GeForce2 unterstützt.

Wenn die nichts nützen, wäre natürlich noch ein PixelShader (ab Radeon9500/GeForceFX) oder das nVidia-Equivalent RegisterCombiner eine Möglichkeit, mit denen du Farbwerte ja selbst nach Lust und Laune manipulieren kannst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 16:18 
Offline
DGL Member
Benutzeravatar

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

die Extension für glBlendFuncSeperateEXT is bei mir leider nich unterstützt (GeForce2 GTS2/Pro)..

und das mit dem glBlendColorEXT versteh ich grad irgendwie nich richtig.. *g*

Ich sage ja mit glBlendColorEXT welche farbe er für das glBlendFunc bentzen soll, oder???

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> glBlendColorEXT(<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>0</span>);
glBlendFunc(GL_ONE,GL_ONE);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Aber egal was für werte ich dort eingebe, es ändert sich rein garnix... :(

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 16:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man muß den Blendcolor extra angeben:
Als Parameter von glBlendFunc kann man dann eine der Konstanten verwenden, damit für diesen Parameter der Blendcolor verwendet wird:
GL_CONSTANT_COLOR_EXT, GL_ONE_MINUS_CONSTANT_COLOR_EXT, GL_CONSTANT_ALPHA_EXT, GL_ONE_MINUS_CONSTANT_ALPHA_EXT

z.B.

Code:
  1.  
  2. glBlendColorEXT(1,1,1,0); &nbsp;
  3. glBlendFunc(GL_CONSTANT_COLOR_EXT,GL_ONE);
  4.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 16:33 
Offline
DGL Member
Benutzeravatar

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

aahh... klar, is logisch *g*
Aber klappen tu's immernochnet :(

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> glColor3f(<span class='integer'>1</span>,<span class='integer'>0</span>,<span class='integer'>0</span>);
glBlendColorEXT(<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>1</span>);
glBlendFunc(GL_CONSTANT_COLOR_EXT,GL_ONE);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Die Weiße fläche der Textur welche rot gefärbt wurde (durch das glColor) is immernoch halb transparent :(

Au'revoir,
Aya~

PS: Ich hab jetzt eben einfach mal die glBlendFuncSeperateEXT geladen, hat nich gemäckert... aber wieso steht das ding nich im ExtensionString?? *guckt unsicher*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 16:38 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Vielleicht is additives Blending hier nicht die richtige Lösung. Probiert mal andere BlendModi aus. Vermutlich wäre AlphaBlending hier besser. Wenn du zusätzlich zu dem Farbverlauf von schwarz nach rot die Alphawerte von 0 nach 1 verlaufen läßt, könnte es gehen, daß das schwarz nicht sichtbar und das rot überhaupt nicht mehr transparent ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 17:27 
Offline
DGL Member
Benutzeravatar

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

hab grad nochmal rumprobiert.. und, an und für sich klappt das wohl schon, nur...

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> glColor3f(<span class='integer'>1</span>,<span class='integer'>0</span>,<span class='integer'>0</span>);
glBlendColorEXT(<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>1</span>,<span class='integer'>1</span>);
glBlendFunc(GL_CONSTANT_COLOR_EXT,GL_ONE);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

wenn ich hier bei glBlendColorEXT jetzt (0,0,1,1) angebe, würde er das Rot noch Blau einfärben, also als wenn ich glColor3f(1,0,1) mache...

Das Problem worum es mir geht ist meine ParticleEngine...
Wenn ich z.B. nen großen haufen grüner Partikel habe, schauen die so aus:
Bild

Es ist alles halb transparent... :(
Ist ja im grunde auch logisch, denn grün ist nen mittelding zwischen weiß (nicht transparent) und schwarz (voll transparent) = es ist halb transparent *g*

Oder gibt es da ne bessere lösung für??

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich nehme mal an, das du für die Partikel eine Gradienttextur, die von Weiss(Innen) nach Schwarz(Aussen) geht, und willst diese dann per Partikelsystem spezifisch einfärben lassen?
Wenn ja, warum änderst du dann nicht einfach den Farbwert der Textur selbst.So eine Partikeltextur ist ja im Normalfall recht klein, und das Einfärben der Pixeldaten direkt ist ja auch kein Problem...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 18:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Na ja... machbar wäre das schon, aber nehmen wir mal an wir haben 3000 Partikel, bei denen jedes Partikel ne andere Farbe haben soll... dann wären das 3000 glBindTextures... schon nich so gut, oder? ;)

Gibt's da nich noch ne andere lösung?? *guckt verzweifelt*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Bei Rauch habe ich glblendfunc(gl_one_minus_dst_color,gl_one) verwendet. Das sieht zumindest bei weißen Rauch gut aus und die Farben übersättigen nicht so schnell. Ob das bei grün auch geht müßte man mal ausprobieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 18:51 
Offline
DGL Member
Benutzeravatar

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

na ja... Grün war jetzt nur nen beispiel.. :)
Die Partikel können ja jede X-Beliebige Farbe haben... :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Auch wenns ne leicht abwegige Idee ist, könntest du deine Partikelsystem doch in eine Textur rendern und müsstest dann nur diese Textur in deine Szene bleden.Dadurch könntest du das von dir angesprochene Problem rein theoretisch umgehen und hättest auch noch alle möglichen Manipulationsmöglichkeiten...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 19:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Son of Satan hat geschrieben:
Auch wenns ne leicht abwegige Idee ist, könntest du deine Partikelsystem doch in eine Textur rendern und müsstest dann nur diese Textur in deine Szene bleden.Dadurch könntest du das von dir angesprochene Problem rein theoretisch umgehen und hättest auch noch alle möglichen Manipulationsmöglichkeiten...

Hä? :)

Was würde das bringen??? Denn auf der Textur wären dann z.B. doch 1000 Grüne Partikel.. würde ich dann diese große Textur in die Scene packen und dort Blending verwenden, würde das grüne von der Textur doch genauso transparent werden, oder?? *guckt unsicher*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nein...dein Problem liegt ja daran, das deine Gradienttransparenz durch dein glColor3f verfälscht wird (da weiss ja nach glColor3f <> weiss).Wenn du jetzt dein Partikelsystem in eine Textur renderst, dann musst du ja wenn du es in deine Sezen zeichnest (dann halt nur als Quad mit deiner neuen Partikelsystemtextur) kein glColor3f mehr nutzen um die Partikel grün zu machen, da du sie ja bereits grün in die Textur gerendert hast.Und die Transparenz dieser PS-Textur speicherst du halt im Alphakanal ab!
Dadurch sollte dann dein Blending wie du es am Anfang beschrieben hast ohne Probleme funktionieren, da es ja nicht mehr durch ein glColor3f verfälscht wird.

Edit : Wenn ich mir das so genau überlege, dann frag ich mich warum du die Transparenz nicht einfach im Alphakanal deiner Partikeltextur speicherst?Das dürfte doch alle Probleme aus dem Weg räumen die durch verschiedene Partikelfarben entstehen können.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 25, 2003 19:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Son of Satan hat geschrieben:
Edit : Wenn ich mir das so genau überlege, dann frag ich mich warum du die Transparenz nicht einfach im Alphakanal deiner Partikeltextur speicherst?Das dürfte doch alle Probleme aus dem Weg räumen die durch verschiedene Partikelfarben entstehen können.

Weil du mir mal angemäckert hast, als ich meinte das man mit dem AlphaKanal der Textur andere werte als 0 und 1 benutzen kann.. ;)

du meintest das bei nem Wert 1<0 nur die Farbe schwächer werden würde, aber man das objekt dahinter trotzdem nic hsehen würde oder so... Weiß nemmer genau *g*

Aufjedenfall meintest du, das wenn das so machbar wäre (über AlphaKanal) das normale Blending ja völlig sinnlos wäre.. :)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 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 | 14 Queries | GZIP : On ]