[OpenGL/C++]Problem z Blendingiem

0

Mam problem. Chciałbym, żeby zamiast koloru czarnego w danej teksturze było widać to co jest zapisane w buforze ( czyli to co jest pod obiektem na który nałożona jest tekstura ). Jednak nie mogę uzyskać pożądanego rezultatu:

W bmp.data mam zapisane znaki, które po rzutowaniu na int dają
r g b a r g b a ... r g b a

Które mają wartości pomiędzy 0 a 255. Dla koloru czarnego 'a' ma 0, a dla innych 255.
Następnie robię:

 glGenTextures(1, &texture);
 glBindTexture(GL_TEXTURE_2D, texture);

 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

 glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);

 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

  gluBuild2DMipmaps(GL_TEXTURE_2D, 4, bmp.szerokosc, bmp.wyskosc,  GL_RGBA, GL_UNSIGNED_BYTE, bmp.data);

texture jest typu GLuint.

i wyświetlam:

glPushMatrix();
glColor3f(0, 0, 1);
glTranslatef(0, 0.25, -1.0f);
glBegin(GL_QUADS);
 glTexCoord2f(1.0, 1.0f);  glVertex2d(0.5*0.6,0.5*0.5);
 glTexCoord2f(0.0f, 1.0f); glVertex2d(-0.5*0.6,0.5*0.5);
 glTexCoord2f(0.0f, 0.0f); glVertex2d(-0.5*0.6,-0.5*0.5);
 glTexCoord2f(1.0, 0.0f);  glVertex2d(0.5*0.6,-0.5*0.5);
glEnd();
glPopMatrix();


glPushMatrix();
glColor3f(0, 1, 0);
glTranslatef(0, -0.25, -1.0f);
glBegin(GL_QUADS);
 glTexCoord2f(1.0, 1.0f);  glVertex2d(0.5*0.6,0.5*0.5);
 glTexCoord2f(0.0f, 1.0f); glVertex2d(-0.5*0.6,0.5*0.5);
 glTexCoord2f(0.0f, 0.0f); glVertex2d(-0.5*0.6,-0.5*0.5);
 glTexCoord2f(1.0, 0.0f);  glVertex2d(0.5*0.6,-0.5*0.5);
glEnd();
glPopMatrix();

glPushMatrix();
glEnable(GL_TEXTURE_2D);
glEnable( GL_BLEND );
glBindTexture(GL_TEXTURE_2D, texture[1]);

glBlendFunc( GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);

glColor4f(0, 0, 0, 1);
glTranslatef(0, 0, -1.0f);
glBegin(GL_QUADS);
 glTexCoord2f(1.0, 1.0f);  glVertex2d(0.5*0.5,0.5*0.5);
 glTexCoord2f(0.0f, 1.0f); glVertex2d(-0.5*0.5,0.5*0.5);
 glTexCoord2f(0.0f, 0.0f); glVertex2d(-0.5*0.5,-0.5*0.5);
 glTexCoord2f(1.0, 0.0f);  glVertex2d(0.5*0.5,-0.5*0.5);
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glPopMatrix();

Próbowałem różne kombinacje z glBlendFunc( GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);, ale to nic nie daje!.

Z góry dziękuję za pomoc.

0

Sprawdź alpha test: http://www.glprogramming.com/red/chapter10.html

[<font color="green">edit</span>]

glBlendFunc( GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);

nie powinno być:
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

looknij jeszcze tu:
http://gpwiki.org/index.php/OpenGL_Tutorial_Framework:Particles
http://www.gamedev.net/community/forums/topic.asp?topic_id=18850&forum_id=10&gforum_id=

[<font color="green">edit</span>]
popraw jeszcze to:
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

1 użytkowników online, w tym zalogowanych: 0, gości: 1