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();
Hi NumberXaero. I tried the code, but a white blank screen appears.
This is the size of my window:
gluOrtho2D(0, 500, 0, 500);
The quad is set in the middle of the window:
glTranslatef(250,250,0);
This is the window position:
glutInitWindowPosition(350, 200);