PDA

View Full Version : FadeOut effect/semi transparency



neo187
11-18-2011, 12:15 PM
Hello

I am trying to obtain a simple fadeout effect by having a big textured quad cover the screen with the alpha that gradually increases until being full black... I don't quite understand in what part of the drawing code I should alter the alpha...... I have a wrapper class for textures, this is how I load a texture:




void GLTexture::LoadBMP(char *name)
{
// Create a place to store the texture
AUX_RGBImageRec *TextureImage[1];

// Set the pointer to NULL
memset(TextureImage,0,sizeof(void *)*1);

// Load the bitmap and assign our pointer to it
TextureImage[0] = auxDIBImageLoad(name);

// Just in case we want to use the width and height later
width = TextureImage[0]->sizeX;
height = TextureImage[0]->sizeY;

// Generate the OpenGL texture id
glGenTextures(1, &texture[0]);

// Bind this texture to its id
glBindTexture(GL_TEXTURE_2D, texture[0]);

// Use mipmapping filter
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);

// Generate the mipmaps
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

// Cleanup
if (TextureImage[0])
{
if (TextureImage[0]->data)
free(TextureImage[0]->data);

free(TextureImage[0]);
}
}


Then in the drawing section I enable glBlend and activate the texture:



gluOrtho2D(0, SCREEN_WIDTH, 0, SCREEN_HEIGHT);

glMatrixMode (GL_MODELVIEW);
glLoadIdentity();

glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );

glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

tex.Use();

//Draw the textured quad here




void GLTexture::Use()
{
glEnable(GL_TEXTURE_2D); // Enable texture mapping
glBindTexture(GL_TEXTURE_2D, texture[0]); // Bind the texture as the current one

}



Is there somewhere in this structure that I can implement said effect?

Thanks for your help

Ed Daenar
11-18-2011, 01:36 PM
You don't need textures for this effect. You can draw a black quad that covers your screen (look for "full screen quad") and use blending to achieve the effect while you manipulate the vertex color's alpha each frame (or however you wish).

Also, this:



// Create a place to store the texture
AUX_RGBImageRec *TextureImage[1];

// Set the pointer to NULL
memset(TextureImage,0,sizeof(void *)*1);

// Load the bitmap and assign our pointer to it
TextureImage[0] = auxDIBImageLoad(name);


has to be the strangest way of saying:


// Create a place to store the texture
AUX_RGBImageRec * TextureImage = auxDIBImageLoad(name);