ich hab ein kleines Problem mit Blending.
Wenn ich die "normale" Blending-Funktion glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
setze funktioniert das was ich vorhabe nicht richtig.
Mein Problem:
Ich habe eine Drehscheibe. Um diese Darzustellen habe ich 2 Texturen gemacht. Einen Kreis und einmal das Äußere des Kreises.
Bei den Transparenten stellen wird der Alpha-Kanal auf 255 gesetzt. Das ganze wird dann auf 2 Rechtecke gepackt und das Quadrat mit dem Kreis rotiert. Wenn ich jetzt die obige Blen-Func einsetze (natürlich wird erst der nicht-transparente Teil gerendert), sieht man das Quadrat mit dem Kreis als Schwarzes Quadrat mit dem Kreis innen - obwohl Alpha für den schwarzen Teil eigentlich 255 ist.
Wenn ich glBlendFunc(GL_SRC_ALPHA,GL_ONE) nehme, scheint der Hintergrund durch den eigentlich nicht transparenten Teil durch.
Ja, bei Floats, aber bei nicht-Gleitkomma Werten wird immer der ganze Bereich benutzt. Läuft aber aufs gleiche hinaus: 0 is komplett durchsichtig, und 255 (bei UNSIGNED_BYTE) ist Solide.
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Kann meinen Vorrednern nur zustimmen 0 ist Transparent und 1 bzw 255 in RGB ist solid. Du müsstest bei deinem Bild den Alphakanal invertieren so dass die transparenten Stellen halt eben Schwarz (0) und die Soliden eben weiß (255) sind.
Vielleicht habe ich mich falsch ausgedrückt - in meinem TGA mit Alpha-Kanal ist der Alpha-Teil an einigen Stellen 255 und ich kann trotzdem durchschauen. An denen an denen er 0 ist kann ich natürlich auch durchschauen, aber das ist ja nicht so wichtig. In Gimp wird mir der Alpha-Kanal blos Schwarz an den undurchsichtigen stellen dargestellt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
iso8859-1 hat geschrieben:
In Gimp wird mir der Alpha-Kanal blos Schwarz an den undurchsichtigen stellen dargestellt.
Du meinst an den durchsichtigen Stellen? Weiß ist vollkommen sichtbar und schwarz ist unsichtbar. OpenGL dürfte das zwar nicht allzuviel ausmachen aber das ist eigentlich so üblich und sollte auch so gemacht werden.
In einem meinen Programmen blende ich mit folgender Blendfunc.
Bin allerdings kein Held was die Blendfunc angeht. Kann durchaus sein, dass es da noch ne sinnvollere Möglichkeit gibt mit dem Alphakanal zu blenden aber so richtig habe ich das bisher auch noch nie verstanden. Eines der Dinge mit denen ich auf Kriegsfuß stehe. Es ist leider (oder positiver Weise) so, dass du mit den paar Werten und den 2 Parametern ziemlich viele Möglichkeiten zum Blenden abfangen kannst. Also Addaptives Blending etc. Was die ganze Sache dann nicht unbedingt wesentlich einfacher macht.
Der erste Parameter gibt immer an, wie viel von der Farbe vom neuen Face genommen wird und der Zweite gibt an, wie viel von den Farben genommen werden soll, die bereits im Framebuffer stehen. GL_ONE, GL_ONE bedeutet z.B. dass die Farbe vom Face mit 1 multipliziert wird, die Frabe vom Framebufer mit 1 multipliziert wird, und dass dann beide zusammen addiert werden. GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA bedeutet, dass die Farbe vom Face mit dem Alphawert Multipliziert wird, der Framebuffer mit 1-Alpha multipliziert wird, und dann beide zusammenaddiert werden, also praktisch Color = Face.Color * Face.Alpha + FrameBuffer.Color * Face.Alpha.
GL_SRC_Blablubb ist also immer vom neuen Face und GL_DST_Blablubb vom Framebuffer. GL_ONE ist immer eins und GL_ZERO immer null (is ja logisch).
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
@Lossy
Gimp zeigt durchsichtig als Schachbrettmuster an - sprich als wirklich durchsichtig vor einem Hintergrund der nicht zum Bild gehört. Sonst könnte man ja weiss nicht von durchsichtig unterscheiden.
Ich hab genau diese Blendfunc versucht - ich bekomme aber ein Ergebnis, welches nicht mit dem zusammenpasst das ich haben möchte. Wenn ich die Kreisscheibe einblende (ein Quadrat mit einem opaquen Kreis in der Mitte), dann zeigt er mir die komplette Textur an mit dem transparenten Teil in Schwarz. Dann sieht man natürlich, dass es kein Kreis ist der sich dreht, sondern ein Quadrat. Ausserdem ist dann nichts mehr durchsichtig.
Und das ist im wesentlichen mein Problem.
Entschuldigt bitte. Aber ACD-See hat beim Skalieren den Alpha-Kanal aus dem TGA entfernt. Alles also im Lot. Ich danke für die nette und umfassende Hilfe.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.