// Now as the window is reshaped, you may notice in the other programs, // that it might act a little weird, in this we add the 'reshape' // function. This sets up our View Port and our Perspective mode with // its parameters. // Our glViewport, starts at 0,0 the top left hand corner, and goes // until it reaches the height and width of our window. So from the top // left to the bottom right. // By setting our Matrix Mode to GL_PROJECTION we can play with the 'camera'. // We are setting up our 'camera' to a Perspective mode, this means that // things in the distance appear smaller than those closer to the 'camera'. // Now I will explain the line: // gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); // Our first value here is the angle of sight, so if you could stick your // arms out infront of you in a 60 degree angle and erase everything on the // outside, what is on the inside is what you would see. The next value determines // the aspect ratio of the field of sight in the x direction, where x is the // ratio of x(width) / y(height), then comes the value of 1.0, this is the near factor, // and this is the closest something can get to the 'camera' before dissappearing. Last // is the value 100, this is the far value and is how far the camera can see, so // anything further than 100 would not be drawn. // After this we switch back to our ModelView MatrixMode so we can edit our objects. #include #include void cube (void) { glutWireCube(2); } void display (void) { glClearColor (0.0,0.0,0.0,1.0); glClear (GL_COLOR_BUFFER_BIT); glLoadIdentity(); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); cube(); glFlush(); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode (GL_PROJECTION); //set it so we can play with the 'camera' glLoadIdentity (); //replace the current matrix with the Identity Matrix gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); //set the angle of view, the ratio of sight, the near and far factors glMatrixMode (GL_MODELVIEW); //switch back the the model editing mode. } int main (int argc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE); glutInitWindowSize (500, 500); //set the size of the window glutInitWindowPosition (100, 100); //set the position of the window glutCreateWindow ("A basic OpenGL Window"); glutDisplayFunc (display); glutReshapeFunc (reshape); glutMainLoop (); return 0; }