[OpenGL]alphablending mit ogl -> funktioniert nicht ;(
-
in einem kleinen testprogramm
#include "main.h" int main(int argc,char *argv[]) { GLApp app(1024,768); app.initGL(); SDL_Event event; Sprite s("pic.bmp",1,1); Sprite s2("pic.bmp",1,2); bool running=true; Uint8 *keys; s.zoom(-5.0f); //s bischen nach hinten verschieben s2.zoom(-6.0f); //s2 dahinter s.setAlpha(0.5f); while(running) { app.clear(); s.draw(); s2.draw(); keys=SDL_GetKeyState(0); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: running=false; break; } } if(keys[SDLK_ESCAPE]) { running=false; } app.Update(); } return 0; }versuche ich den ersten quader transparent zu machen.
dies geschieht mit dem aufrufs.setAlpha(0.5f);die methode sieht so aus:
void Sprite::setAlpha(GLfloat alpha) { m_alpha=alpha; }umgesetzt wird das ganze in der draw funktion:
void Sprite::draw() { glLoadIdentity(); glTranslatef(m_x,m_y,m_z); glRotatef(m_rotspeed,m_xrot,m_yrot,m_zrot); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,m_texture); if(m_alpha>0.0f) { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0f,1.0f,1.0f,m_alpha); glEnable(GL_BLEND); } if(m_alpha<=0.0f) { glColor4f(1.0f,1.0f,1.0f,0.0f); } glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(-0.5f,0.5f,0); glTexCoord2i(1,0); glVertex3f(0.5f,0.5f,0); glTexCoord2i(1,1); glVertex3f(0.5f,-0.5f,0); glTexCoord2i(0,1); glVertex3f(-0.5f,-0.5f,0); glEnd(); if(m_alpha>0.0f) { glDisable(GL_BLEND); } glDisable(GL_TEXTURE_2D); }jedoch wird der quader und die darauf liegende textur nicht durchsichtig, sondern lediglich etwas dünkler.
und um fragen zu vermeiden: beim laden einer textur wird ein modus verwendet der auch den alphakanal enier bitmap verwendet:
glTexImage2D(GL_TEXTURE_2D,0,4,converted->w,converted->h,0,GL_RGBA,GL_UNSIGNED_BYTE,converted->pixels);und an der textur liegt es nicht, denn es geht mit keiner von denen die ich ausprobiert habe.
achja und nun die frage: wieso wird die textur(der quader) nicht transparent sondern nur etwas dünkler?
-
TravisG schrieb:
jedoch wird der quader und die darauf liegende textur nicht durchsichtig, sondern lediglich etwas dünkler.
Kann es sein, daß Du nen dunklen Hintergrund hast und nur Dein Viereck renderst? Was genau erwartest Du, wie das aussieht? Der Hintergrund scheint durch und dunkelt das Viereck dadurch ab.
Ist Dir eigentlich schonmal aufgefallen, daß quader nicht die richtige Übersetzung von quad ist? Ein Quader ist ein 3-dimensionales Gebilde. Ein quad ist ein Viereck und damit zweidimensional.
-
Jester schrieb:
TravisG schrieb:
jedoch wird der quader und die darauf liegende textur nicht durchsichtig, sondern lediglich etwas dünkler.
Kann es sein, daß Du nen dunklen Hintergrund hast und nur Dein Viereck renderst? Was genau erwartest Du, wie das aussieht? Der Hintergrund scheint durch und dunkelt das Viereck dadurch ab.
nein dahinter ist noch ein zweiter quader
-
TravisG schrieb:
nein dahinter ist noch ein zweiter quader
Der aber nicht gezeichnet wird weil du
da
glColor4f(1.0f,1.0f,1.0f,0.0f); stehen hast...
glaub ich ...
-
Mortal2006 schrieb:
TravisG schrieb:
nein dahinter ist noch ein zweiter quader
Der aber nicht gezeichnet wird weil du
da
glColor4f(1.0f,1.0f,1.0f,0.0f); stehen hast...
glaub ich ...dieses glColor4f wird aufgerufen wenn der alphawert kleiner oder gleich 0.0f (also keine transparenz) ist. ich lasse den sprite dann vorsichtshalber weiss malen da js ja sonst probs mit der textur geben kann
-
<edit>
Mein erster Kommentar war falsch. Aber vllt. liegt's am Alpha-Wert von s2. Wenn du gegen den Hintergrund mit einem Alpha von 0.0 blendest, ist das Sprite unsichtbar. Versuchs mal bei s2 mit einem Alpha von 1.0. </edit>
-
don_basto schrieb:
<edit>
Mein erster Kommentar war falsch. Aber vllt. liegt's am Alpha-Wert von s2. Wenn du gegen den Hintergrund mit einem Alpha von 0.0 blendest, ist das Sprite unsichtbar. Versuchs mal bei s2 mit einem Alpha von 1.0. </edit>brachte nichts
-
Schmeiß mal zu Testzwecken alle Blends und Alpha-Tests heraus. Hatte schon so manches Problem vom Typ "wird nicht gezeichnet" bei mir gelöst (wenn es dann funktioniert, wieder Schritt für Schritt aktivieren
).
-
wolfgke schrieb:
Schmeiß mal zu Testzwecken alle Blends und Alpha-Tests heraus. Hatte schon so manches Problem vom Typ "wird nicht gezeichnet" bei mir gelöst (wenn es dann funktioniert, wieder Schritt für Schritt aktivieren
).nachdem ich entsprechendes rausgeschmissen habe ist es eben, wie ohne blending.. 2 sprites die maximale helligkeit haben und das eine hinter dem anderen ist.. hat sich also nichst verändert
edit: nochma richtig durchlesen: die beiden dinger werden schon gezeichnet, jedoch wird der vordere der zwei quads nicht durchsichtig sondern lediglich etwas dünkler..