What is the use of reshape() function in glut?
c, opengl
Solution
It appears that the `glutReshapeFunc()` function takes a pointer to a function; presumably, in fact, it is declared as something somewhat similar to:
void glutReshapeFunc(void (*function)(int x, int y));
Similarly, `glutDisplayFunc()` takes another pointer to a function, and `glutKeyboardFunc()` also takes a pointer to a function. When a function is specified by name without the function call parentheses after it, it reduces to 'pointer to a function' (or you can think of a bare function name as a pointer to the function body, like a bare array name is a pointer to the start of the array).
You'd have to read the manual to discover the purpose of the `x` and `y` parameters to the `keyboard()` function. They aren't used by the code shown. They are likely the position of something, but which something is less than clear without reading the manual.
Problem
How is the `reshape()` function working in this code and how is it getting its parameter from `glutReshapeFunc(reshape)` without any parameter in reshape of `glutReshapeFunc(reshape)`? What is the value of `int x`, `int y` in `void keyboard (unsigned char key, int x, int y)` function? ``` #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> 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(&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; } ```