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???
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.
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
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*
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.
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:
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*
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...
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*
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.
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...
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*
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.
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..
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.