title: What is the use of reshape() function in glut?
body: <p>How is the <code>reshape()</code> function working in this code and how is it getting its parameter from <code>glutReshapeFunc(reshape)</code> without any parameter in reshape of <code>glutReshapeFunc(reshape)</code>?
  What is the value of <code>int x</code>, <code>int y</code> in <code>void keyboard (unsigned char key, int x, int y)</code> function?</p>
  
  <pre><code>#include &lt;GL/gl.h&gt;
  #include &lt;GL/glu.h&gt;
  #include &lt;GL/glut.h&gt;
  
  static int year = 0, day = 0;
  
  void init(void) 
  {
     glClearColor (0.0, 0.0, 0.0, 0.0);
     glShadeModel (GL_FLAT);
  }
  
  void display(void)
  {
     glClear (GL_COLOR_BUFFER_BIT);
     glColor3f (1.0, 1.0, 1.0);
  
     glPushMatrix();
     glutWireSphere(1.0, 20, 16);   /* draw sun */
     glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
     glTranslatef (2.0, 0.0, 0.0);
     glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
     glutWireSphere(0.2, 10, 8);    /* draw smaller planet */
     glPopMatrix();
     glutSwapBuffers();
  }
  
  void reshape (int w, int h)
  {
     glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
     glMatrixMode (GL_PROJECTION);
     glLoadIdentity ();
     gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  }
  
  void keyboard (unsigned char key, int x, int y)
  {
     switch (key) {
        case `d':
           day = (day + 10) % 360;
           glutPostRedisplay();
           break;
        case `D':
           day = (day - 10) % 360;
           glutPostRedisplay();
           break;
        case `y':
           year = (year + 5) % 360;
           glutPostRedisplay();
           break;
        case `Y':
           year = (year - 5) % 360;
           glutPostRedisplay();
           break;
        default:
           break;
     }
  }
  
  int main(int argc, char** argv)
  {
     glutInit(&amp;argc, argv);
     glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
     glutInitWindowSize (500, 500); 
     glutInitWindowPosition (100, 100);
     glutCreateWindow (argv[0]);
     init ();
     glutDisplayFunc(display); 
     glutReshapeFunc(reshape);
     glutKeyboardFunc(keyboard);
     glutMainLoop();
     return 0;
  }
  </code></pre>