How to draw on top of image

This is my first time using opengl and I am experimenting with adding/drawing polygons/points/etc. on top of a PPM image. The image is already loaded when the application runs. My attempt to draw a square is from lines 30 - 35. The program runs but the square is not present. Just the image. Any help is appreciated.


#include<windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<Gl/gl.h>
#include<GL/glut.h>

int n;
int m;

int *image;

void myInit (void)
{
     glClearColor ( 1.0, 1.0, 1.0 , 1.0);
     glColor3f ( 1.0f, 0.0f, 0.0f );
     glPointSize ( 4.0 );
     glMatrixMode ( GL_PROJECTION );
     glLoadIdentity ( );
     gluOrtho2D ( 0.0, 400.0, 1.0, 400.0 );
}


void display(void)
{

    glClear ( GL_COLOR_BUFFER_BIT );
    glRasterPos2i(0,0);
    glDrawPixels(n,m,GL_RGB, GL_UNSIGNED_INT, image);
    glPointSize(10.0);
    glBegin(GL_POLYGON);
             glVertex2f(-0.5, -0.5);
             glVertex2f(-0.5, 0.5);
             glVertex2f(0.5, 0.5);
             glVertex2f(0.5, -0.5);
    glEnd();
    glFlush ( );

}

void myreshape(int h, int w)
{
	glMatrixMode (GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0, (GLfloat) n, 0.0, (GLfloat) m);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glViewport(0,0,h,w);
}

int main(int argc, char**argv)
{
	FILE *fd;
	int k, nm;
	char c;
	char b[70];
	float s;
	char red, green, blue;
	int x, y;

	fd = fopen("map.ppm", "r");
	if(fd == 0)
	{
		exit(0);
	}


	fscanf(fd, "%s", b);
	if((b[0] != 'P') || (b[1] != '6'))
	{
		printf("%s is not a PPM file!
", b);
		exit(0);
	}

	fscanf(fd, "%c", &c);

	fscanf(fd, "%c", &c);
	while(c == '#')
	{
		fscanf(fd, "%[^
]", b);
		printf("%s
", b);
		fscanf(fd, "%c", &c);
		printf("%c", c);
	}

	ungetc(c,fd);

	fscanf(fd, "%d %d %d", &n, &m, &k);

	printf("%d rows  %d colums  max value = %d
", n, m, k);

	nm = n*m;

	image = (int*)malloc(3*sizeof(GLint)*nm);

	s = 255./k;

	for(x = 0; x < m; x++)
	{
		for(y = n-1; y >= 0; y--)
		{
           fscanf(fd, "%c", &red);
    	   fscanf(fd, "%c", &green);
	       fscanf(fd, "%c", &blue);

		   image[3*nm - 3*(x*n +y) -3] = green;
		   image[3*nm - 3*(x*n +y) -2] = blue;
		   image[3*nm - 3*(x*n +y) -1] = red;

		}
	}


	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(n,m);
	glutInitWindowPosition(0,0);
	glutCreateWindow("Little BigHorn");
	glutReshapeFunc(myreshape);
	glutDisplayFunc(display);
	glPixelTransferf(GL_RED_SCALE, s);
	glPixelTransferf(GL_GREEN_SCALE, s);
	glPixelTransferf(GL_BLUE_SCALE, s);
	glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
	glClearColor(1.0, 1.0, 1.0, 1.0);
	myInit ( );
    glutMainLoop ( );
}

Your chosen projection and the coordinates of your polygon’s vertices don’t fit together.


gluOrtho2D ( 0.0, 400.0, 1.0, 400.0 );

This makes vertices with x in [0,400] and y in [1,400] project to your screen, but your vertex positions are in [-0.5,0.5].

Wooooooowwwww…I feel stupid. Thank you very much!