Witam.
Programuję w C++ pod Visualem, z uzyciem WindowsForms, biblioteki OpenGL oraz SDL.
Mam problem z teksturowaniem, a dokładnie z kanałem alpha. Teksturuję plikami .bmp, w Gimpie dla 32-bitowych plików dodałem kanał alpha tak by mieć przeźroczyste tło. Nie wiem jak przerobić swój kod tak by uwzgledniał kanał alpha.
Prosiłbym o pomoc w tym temacie.
Mój kod teksturowania bez kanału alpha:
static GLuint texture[2];
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoadA(Filename);
}
return NULL;
}
int LoadGLTextures()
{
int Status=FALSE, i;
AUX_RGBImageRec *TextureImage[2];
memset(TextureImage,0,sizeof(void *)*8);
if ((TextureImage[0]=LoadBMP("obraz1.bmp"))&&(TextureImage[1]=LoadBMP("obraz2.bmp")))
{
Status=TRUE;
glGenTextures(3, &texture[0]);
for(i=0;i<3;i++)
{
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}}
for(i=0;i<3;i++){
if (TextureImage[i])
{
if (TextureImage[i]->data)
{
free(TextureImage[i]->data);
}
free(TextureImage[i]);
}
}
return Status;
}
System::Void Anim(System::Void)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, texture[klatka]);
licznik++;
if (licznik>4)
{
klatka++;
if (klatka>2) klatka=0;
licznik=0;
}
glEnable(GL_TEXTURE_2D);
glTranslatef(0.0f,0.0f,-90.0f);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_QUADS);
glTexCoord2d(0.0,1.0);
glVertex3f(-16.0f, 14.0f,0.0f);
( ... )