title: How do I draw a shape on key press using GLUT?
body: <p>I want to draw a cylinder when I press the spacebar key. </p>
  
  <p>This is an excerpt of the code I have right now:</p>
  
  <pre><code>void draw_cylinder(GLfloat radius,
      GLfloat height,
      GLubyte R,
      GLubyte G,
      GLubyte B)
  {
      GLfloat x = 0.0;
      GLfloat y = 0.0;
      GLfloat angle = 0.0;
      GLfloat angle_stepsize = 0.1;
  
      /** Draw the tube */
      glColor3ub(R - 40, G - 40, B - 40);
      glBegin(GL_QUAD_STRIP);
      angle = 0.0;
      while (angle &lt; 2 * 3.141) {
          x = radius * cos(angle);
          y = radius * sin(angle);
          glVertex3f(x, y, height);
          glVertex3f(x, y, 0.0);
          angle = angle + angle_stepsize;
      }
      glVertex3f(radius, 0.0, height);
      glVertex3f(radius, 0.0, 0.0);
      glEnd();
  
      /** Draw the circle on top of cylinder */
      glColor3ub(R, G, B);
      glBegin(GL_POLYGON);
      angle = 0.0;
      while (angle &lt; 2 * 3.141) {
          x = radius * cos(angle);
          y = radius * sin(angle);
          glVertex3f(x, y, height);
          angle = angle + angle_stepsize;
      }
      glVertex3f(radius, 0.0, height);
      glEnd();
  }
  
  void display() {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glMatrixMode(GL_MODELVIEW); 
  }
  
  void reshape(GLsizei width, GLsizei height) {  
      if (height == 0) height = 1;
      GLfloat aspect = (GLfloat)width / (GLfloat)height;
  
      glViewport(0, 0, width, height);
  
      glMatrixMode(GL_PROJECTION);  
      glLoadIdentity();            
      gluPerspective(35.0f, aspect, 0.1f, 100.0f);
  }
  
  void processKeys(unsigned char key, int x, int y) {
  
      if (key == 32) { // space key
          glLoadIdentity();
          glTranslatef(0.0, -0.4, -5.0);
          glRotatef(-90, 0.4, 0.0, 0.0);
          draw_cylinder(0.3, 1.0, 255, 160, 100);
      }
      glutPostRedisplay();
  }
  
  int main(int argc, char** argv) {
      glutInit(&amp;argc, argv);            // Initialize GLUT
      glutInitDisplayMode(GLUT_DOUBLE); // Enable double buffered mode
      glutInitWindowSize(640, 480);   // Set the window's initial width &amp; height
      glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
  
      glutCreateWindow(title);          // Create window with the given title
      glutKeyboardFunc(processKeys);
      glutDisplayFunc(display);       // Register callback handler for window re-paint event
      glutReshapeFunc(reshape);       // Register callback handler for window re-size event
      initGL();                       // Our own OpenGL initialization
      glutMainLoop();                 // Enter the infinite event-processing loop
  
      return 0;
  }
  </code></pre>
  
  <p>However, when I press the spacebar, the cylinder is not drawn. I'm not sure of what to do. When I copy the code I have in the <strong>processKeys</strong> method and paste it into the <strong>display</strong> method, it works fine. 
  How am I supposed to do it?</p>