I wrote some code, expecting to see a square in the middle of the screen, instead the square appears higher up, in some aspect ratios near the top of the screen, and slightly to the left.

With another aspect ratio:

Here’s the relevant part of my code:
void resize(uint32_t height, uint32_t width){
glViewport(0, 0, width, height);
glMatrixMode (GL_PROJECTION); //set the matrix to projection
glLoadIdentity();
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}
void draw(){
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
//set up camera
glLoadIdentity();
gluLookAt(0,10,0,0,0,0,0.001,0.999,0);
//draw a square in the center of the screen
glBegin(GL_TRIANGLE_FAN);
glColor4f(0,1,1,1);
glVertex3f(-1,0,-1);
glVertex3f(-1,0,1);
glVertex3f(1,0,1);
glVertex3f(1,0,-1);
glEnd();
glPopMatrix();
}
Isn’t 0,0,0 supposed to be the middle of the screen? And isn’t gluLookAt supposed to put whatever coordinate i specify in the center of the screen?
Change the value of
upvectoryour eyes is at positive
y-axis and reference point at center andup(head) vector must be alongz-axis.You have done another mistake in your resize function
your variable
heightstores width of screen and variablewidthstores height, you have defined theglViewportand ingluPerspectiveyou think your are taking ratiowidthbyheight, but actually you are taking ratioheightbywidth, so it occurs the problem. Edit you code as follows: