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.