Iam trying to load a bmp image into OpenGL. The program works fine but the image does not appear. The source code below does not contain any errors. Could you please help.
Thanks
Iam trying to load a bmp image into OpenGL. The program works fine but the image does not appear. The source code below does not contain any errors. Could you please help.
Thanks
Its most likely due to mipmaps, since you didn't generate any and didn' disable mipmapping filter eigther. Eigther use
glGenerateMipmap(GL_TEXTURE_2D)
after glTexImage2D or turn of mipmapping by by setting the filter to GL_LINEAR.
You may load into OpenGL any image file Windows available with the CImage class. Technology provided:Codes and Demo.
Your texture coordinates are all 1.0, try
glTexCoord2f(1.0, 1.0);glVertex3f( 2, 2, 0.0);
glTexCoord2f(1.0, 0.0);glVertex3f( 2, -2, 0.0);
glTexCoord2f(0.0, 0.0);glVertex3f( -2, -2, 0.0);
glTexCoord2f(0.0, 1.0);glVertex3f( -2, 2, 0.0);
also might want to check the winding on that quad and your GL_TEXTURE_WRAP_*, s and t modes.
Are you sure of using GL_RGBA for a bmp in your glTexImage2D?
Anyway, this tutorial loads a bmp.
Its most likely due to mipmaps, since you didn't generate any and didn' disable mipmapping filter eigther. Eigther use
glGenerateMipmap(GL_TEXTURE_2D)
after glTexImage2D or turn of mipmapping by by setting the filter to GL_LINEAR.
Where do I place it?
Your texture coordinates are all 1.0, try
glTexCoord2f(1.0, 1.0);glVertex3f( 2, 2, 0.0);
glTexCoord2f(1.0, 0.0);glVertex3f( 2, -2, 0.0);
glTexCoord2f(0.0, 0.0);glVertex3f( -2, -2, 0.0);
glTexCoord2f(0.0, 1.0);glVertex3f( -2, 2, 0.0);
also might want to check the winding on that quad and your GL_TEXTURE_WRAP_*, s and t modes.
Thanks I changed it. Now I can see the picture upside down and a bit blurry. I edited the code above. Could you please have a look at it.
The picture is blurry since you used GL_LINEAR instead of GL_NEAREST in those calls:
glTexCoord2f(1.0, 0.0);glVertex3f( 2, 2, 0.0);
glTexCoord2f(1.0, 1.0);glVertex3f( 2, -2, 0.0);
glTexCoord2f(0.0, 1.0);glVertex3f( -2, -2, 0.0);
glTexCoord2f(0.0, 0.0);glVertex3f( -2, 2, 0.0);
The picture is blurry since you used GL_LINEAR instead of GL_NEAREST in those calls:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);And if the texture is upside down, you just have to invert the y texture coordinates.glTexCoord2f(1.0, 0.0);glVertex3f( 2, 2, 0.0);
glTexCoord2f(1.0, 1.0);glVertex3f( 2, -2, 0.0);
glTexCoord2f(0.0, 1.0);glVertex3f( -2, -2, 0.0);
glTexCoord2f(0.0, 0.0);glVertex3f( -2, 2, 0.0);
I modfied the code, but the picture is still blurry. Iam trying to insert the image below. I have resized it and made it smaller. Do you think I need to change the values within texture buffer?
t1 = AllocateTextureBuffer(256, 50, 4);
This is what it looks like.
direct link
Are you trying to display this on a 2d quad stuck to the screen, or, in 3d? Im assuming 2d because you are using gluOrtho. Its going to be blurry to some degree if the pixels dont map 1 to 1 with the quad.
Use the following to stop the image from repeating, unless repeating is what you want then use GL_REPEAT
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Im not sure what size the glut window is, so try this to start
int gWidth = 800, gHeight = 600; // store these globally where all functions can access
glutInitWindowSize(gWidth, gHeight); // before glutCreateWindow()
Also setup a reshape function to handle window resizing
void Resize()
{
glViewport(0, 0, (GLsizei)gWidth, (GLsizei)gHeight);
// initialize viewing values
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 1.0, 0.0, 1.0); // 2d coordinates will need to be normalized (0.0 to 1.0)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void ReshapeGlut(int w, int h)
{
// update
gWidth = w;
gHeight = h;
// apply
Resize();
}
glutReshapeFunc(Reshape); // set it in main after create window
and when drawing, draw using normalized coordinates and fit the quad to the image (might have to call Resize() before clearing during draw)
const float nw = float(ti->width) / float(gWidth);
const float nh = float(ti->height) / float(gHeight);
glBegin(GL_QUADS); // counter clock wise
glTexCoord2f(0.0, 0.0);glVertex3f( 0.0, 0.0, 0.0); // bottom left corner
glTexCoord2f(1.0, 0.0);glVertex3f( nw, 0.0, 0.0); // bottom right
glTexCoord2f(1.0, 1.0);glVertex3f( nw, nh, 0.0); // top right
glTexCoord2f(0.0, 1.0);glVertex3f( 0.0, nh, 0.0); // top left
glEnd();