• Welcome to Vampyre Imaging Library Forum. Please login or sign up.
 

How to properly create PNG texture with Alpha in OpenGL.

Started by Wodzu, 8 April 2010, 23:08:43

Previous topic - Next topic

Wodzu

Hi guys.

I am problem with PNG files under OpenGL. The file is an PNG image (256x256) with many levels of transparency.

I am loading it like this:

var
  Textures: array[1..6] of GLuint;   

  Textures[4] := LoadGLTextureFromFile('Images\font_0.png');


And I am displaying it on the quad like this:

glBindTexture(GL_TEXTURE_2D, Textures[4]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex3f(-2, 2, 1);

glTexCoord2f(1, 0);
glVertex3f(2, 2, 1);

glTexCoord2f(1, 1);
glVertex3f(2, -2, 1);

glTexCoord2f(0, 1);
glVertex3f(-2, -2, 1);
glEnd();   


However, the file is not displayed correctly. It looks disrupted. I suspect that I need to explictly state somewhere the file format to OpenGL?

Do I need to write my own texture loading routine in the case of PNG file?

Thanks for your time.

Galfar

Could you post a screenshot of how distorted it looks?

QuoteI suspect that I need to explictly state somewhere the file format to OpenGL?

No, OpenGL doesn't care how the file was stored on the disk.

Did you set texture filtering, wraping, etc. after the texture was created? Have you setup alpha blending in OpenGl correctly?

Wodzu

Thank you Galfar for such quick replay.

By file format I've meant the format of data A8R8G8B8 or something like that.
I am quite new to the OpenGL so I am sure it is my fault;)

Take a look at the screenshot. On the left we have PNG texture on the right we have BMP texture. Both are on the size 256x256.
BMP texture is displayed correctly PNG is not.



To be honest I am not sure that I've set up the blending properly. I've set up only only Alpha and not blending (cause I do not know how yet). So I have 1 bit transperency now.

  glAlphaFunc( GL_GREATER, 0 );
  glEnable( GL_ALPHA_TEST );
                  

I've also attached a compiled example program with source code.

Thank you for your time.

Galfar

Instead of alpha testing:
glAlphaFunc( GL_GREATER, 0 );
glEnable( GL_ALPHA_TEST );

use alpha blending:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
or glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)


You can look at OpenGL demo of Imaging in Demos folder.


QuoteBy file format I've meant the format of data A8R8G8B8 or something like that.

Thar's setup for you in LoadGLTextureFromFile.

Wodzu

Thank you.

I've managed to compile OpenGLDemo under Lazaurs. Blending works nicely!

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Name:
Email:

Shortcuts: ALT+S save/post or ALT+P preview

SMF spam blocked by CleanTalk