Blending mit Alpha Channel
-
Also ich hab ein PNG mit AlphaChannel. Dieses hier
darstellen möchte ich das Ganze so :
int cImgBox::show () { if (blend & 0x01) { glEnable (GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glClearColor (0.0,0.0,0.0,1.0); } glColor3ub(255, 255, 255); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2i(posx , posy); glTexCoord2f(1, 0); glVertex2i(posx + width, posy); glTexCoord2f(1, 1); glVertex2i(posx + width, posy+height); glTexCoord2f(0, 1); glVertex2i(posx , posy+height); glEnd(); if (blend & 0x01) { glDisable (GL_BLEND); } }
Das Ergebnis ist leider nicht das was ich haben will
Das Hintergrundbild ist übrigens nen BMP ohne Alpha channel.Kann mir wer meinen Fehler erklären ?
-
DocJunioR schrieb:
Das Ergebnis ist leider nicht das was ich haben will
[...]
Kann mir wer meinen Fehler erklären ?
Aha...
-
also zur Erklärung (sry dass ich's vergessen hab)
Was ich haben möchte ist das kleine Buch ohne den schwarzen Hintergrund. Das einzige was ich aber hinbekomme ist der schwarze Rand oder ein geisterhaft durchsichtiges kleines Buch.Edit : hab zur Verdeutlichung mal den Hinterfgrund geändert.
-
Das geht sicher auch irgendwie mit dem Alpha zeugs, aber so ist das denke dafür einfacher ->
SDL_SetColorKey(deinSurface, SDL_SRCCOLORKEY, SDL_MapRGB(deinSurface->format, 0,0,0));
das sollte die farbe schwarz dann durchsichtig machen ...
-
er scheint mit OpenGL zu arbeiten, die SetColorkey-funktion funktioniert nur für SDL_Surfaces und nicht für OpenGL-Texturen.
-
Dat klappt leider auch nicht so wirklich, da ich das Ganze ja dann blitten müsste..
-
ahso !
ich dachte weil da oben SDL_app stand
-
also, ich verwend zwar directx, aber wenns in ogl sowas gibt:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
dann nehm ich mal an, dasses auch sowas gibt:
glBlendFunc(GL_DEST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
und ich nehm an, dass dein blending dann so funzen wird...
glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA); glBlendFunc(GL_DEST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
kann natürlich sein, dass die konstanten anders heißen
kann natürlich auch sein, dass ich kompletten blödsinn labere...
-
ich weiß nicht, ob man mehr als eine Blendfunc angeben kann.. So gehts aber leider auch nicht
-
hab mal meinen Sourcecode hochgeladen.
kann sich da mal wer konstruktiv zu äußern ?
Mein Source als .zip