alpha blending
-
Hi,
habe folgenden code geschrieben um einfach ein quad mit textur zu bepinseln. die textur hat einen alphakanal. die farbe der textur ist komplett weiß. der alphakanal ist einfach einweißer fleck, der nach außen hin schwarz wird(So ein radialer gradient eben). rgba sind korrekt gespeichert, photoshop zeigt das auch.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tex_id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex3f(-5,-5,0); glTexCoord2f (1.0f,0.0f); glVertex3f(+5,-5,0); glTexCoord2f (1.0f,1.0f); glVertex3f(+5,+5,0); glTexCoord2f (0.0f,1.0f); glVertex3f(-5,+5,0); glEnd();Ich würde erwarten, dass die entsprechenden teile dann mehr oder weniger durchsichtig sind - je nach wert im alphakanal - im Prizip ein voll sichtbarer weier fleck der nach außen hin ausblendet.
Dem ist aber nicht so. Was stattdessen passiert ist Folgendes:
Es wird ein Quadrat gezeichnet, das vollständig sichtbar ist - sprich gar keine transparenz. Dieses Quadrat scheint mit dem Alphakanal alleine texturiert zu sein. Soll heißen ich sehe einen weißen fleck, der nach außen hin schwarz wird anstatt transparent.Woran liegt das? Was kann ich tun, dass es funktioniert, wie ich das gerne hätte?
MFG fatzge
-
Du bist dir sicher, dass die Textur auch korrekt geladen, d.h. das Dateiformat richtig ausgelesen wurde?
-
fatzge schrieb:
Dem ist aber nicht so. Was stattdessen passiert ist Folgendes:
Es wird ein Quadrat gezeichnet, das vollständig sichtbar ist - sprich gar keine transparenz. Dieses Quadrat scheint mit dem Alphakanal alleine texturiert zu sein. Soll heißen ich sehe einen weißen fleck, der nach außen hin schwarz wird anstatt transparent.welche hintergrundfarbe hast du denn, schwarz?
-
hintergrundfarbe ist schwarz.
Ich bin mir ziemlich sicher, dass das format richtig gelesen wurde. Ist nur eine leicht modifizierte version von einer funktionierenden lesefunktion. statt RGB halt RGBA in glTexImage2D und statt 3 channels sinds 4 beim laden. mehr ist ja nicht zu tun. Und der alphakanal scheint ja auch gelesen zu werden. sieht man ja am endergebnis. aber irgendwie fungiert er nicht als solcher.
EDIT: habe gerade mal die hintergrundfarbe auf rot gewechselt. ist immernoch ein verlauf von weiß nach rot. Für den fall dass die Frage aufkommen sollte^^
-
fatzge schrieb:
hintergrundfarbe ist schwarz.
du blendest eine weisse textur ueber einen schwarzen hintergrund und
fatzge schrieb:
ich sehe einen weißen fleck, der nach außen hin schwarz wird
klingt richtig.
-
siehe voriges edit
Außerdem ist es ja so, dass auch andere Objekte in der szene sind. z.b. ein glutSolidTeapot. Der ist nicht transparent oder sowas. Der Teepot ist hinter dem quadrat und man sieht eben diese Box.
-
fatzge schrieb:
siehe voriges edit
na dann ist ja alles wie es laut deinem code sein sollte. schoen dass wir dein problem loesen konnten :).
-
Whoops.
Ich meinte weiß nach schwarz bei rotem Hintergrund. Nächstes mal lese ich besser ein paar mal drüber, was ich tippe^^Sorry
-
ein wenig mehr code wuerde helfen, z.b. wie xindom sagte koennte der texturelade-teil buggy sein.