Jump to content

View more

Image of the Day

The beast has a mighty searchlight of evil! #screenshotsaturday https://t.co/bzKepOojDL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

How to load a Texture with an Alpha

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Cydriic   Members   


Posted 26 June 2014 - 09:06 PM

Hi Everyone,



I'm trying to load a Quad with a Monster Image on it that will always face the Camera, a la Doom 2.


Now I don't know how to load an image with an Alpha part on it. 


In 2D using SDL I always used tga files.



Here is my LoadTexture functions.


Does anyone have an idea?


Thanks a lot.


AUX_RGBImageRec *LoadBMP(char *Filename)                // Loads A Bitmap Image
        FILE *File=NULL;                                // File Handle
        if (!Filename)                                  // Make Sure A Filename Was Given
                return NULL;                            // If Not Return NULL
        File=fopen(Filename,"r");                       // Check To See If The File Exists
        if (File)                                       // Does The File Exist?
                fclose(File);                           // Close The Handle
                return auxDIBImageLoad(Filename);       // Load The Bitmap And Return A Pointer
        return NULL;                                    // If Load Failed Return NULL
int LoadGLTextures()                                    // Load Bitmaps And Convert To Textures
        int Status=FALSE;                               // Status Indicator
        AUX_RGBImageRec* TextureImage[12];               // Create Storage Space For The Texture
        memset(TextureImage,0,sizeof(void *)*1);        // Set The Pointer To NULL
        // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
        if (TextureImage[0]=LoadBMP("Data/Grass00.bmp"))
                Status=TRUE;                            // Set The Status To TRUE
                glGenTextures(1, &texture[0]);          // Create Textures
// Create Nearest Filtered Texture
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        if (TextureImage[0])                            // If Texture Exists
                if (TextureImage[0]->data)              // If Texture Image Exists
                        free(TextureImage[0]->data);    // Free The Texture Image Memory
                free(TextureImage[0]);                  // Free The Image Structure



return TRUE;



#2 Rootus   Members   


Posted 29 June 2014 - 02:45 AM



If you want to have texture with alpha in OpenGL, you have to modify glTexImage2D call you have inside your LoadGLTextures function. You just need to change its 3rd parameter to  4  and 7th parameter to GL_RGBA.   Texture In this case of course, in TextureImage[0]->data array every 4 bytes shoud correspond to a single pixel of image in RGBA format. Moreover, to get transparency based on alpha in OpenGL, you have to use color blending. In most cases it needs only setting blending function by calling glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) and enabling blending calculations by glEnable(GL_BLEND) call.


If it comes to loading image with alpha from a file, it seems to me that using auxDIBImageLoad function inside your LoadBMP is not a good idea, because it may not handle 32-bit bitmaps. I may be wrong here since I've never used auxDIBImageLoad function. Instead of, you might use Nehe 33 lesson of loading TGA files without GLAUX library.


By the way, you can test fast here your transparency stuff in OpenGL without loading image from a file. Simple use initialized array with 2x2 image of the form

unsigned char imagePixels[] = { 255,0,0,255,   255,255,255,128,  255,255,255,255,  255,0,0,10 };

and use it later to specify 2D texture in OpenGL by calling

glTexImage2D( GL_TEXTURE_2D, 0, 4, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, imagePixels);

Edited by Rootus, 29 June 2014 - 02:49 AM.

Dietary supplements (suplementy diety)

#3 Cydriic   Members   


Posted 05 July 2014 - 08:46 AM

Yessir works fine! 

I had messed up my Texcoords like a newb thanks!!

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.