 <p>Is this the <code>glutIdleFunc</code>, or the one called when you <code>glutPostRedisplay</code>?</p> <p>In either case, you need to first setup a <a href="http://www.opengl.org/resources/libraries/glut/spec3/node49.html" rel="nofollow"><code>glutKeyboardFunc</code></a>, in which you detect whether a certain key is pressed or not.</p> <p>In the case you update the screen only on certain events:</p> <pre><code>... inside the keyboard function if (key_pressed == THE_KEY_YOU_WANT) glutPostRedisplay(); </code></pre> <p>In the case you are using <code>display</code> as the idle function, you can do:</p> <pre><code>global: bool go_next = false; ... inside the keyboard function if (key_pressed == THE_KEY_YOU_WANT) go_next = true; ... inside display: void display(void) { if (go_next) { go_next = false; glLoadIdentity(); glColor3f(1.0f, 0.0f, 0.0f); glPushMatrix(); ... etc glPopMatrix(); } glutSwapBuffers(); } </code></pre> <hr> <p>Side note: It is best to keep the logic and rendering separate. So perhaps a code like this is best:</p> <pre><code>int triangles_to_draw = 0; ... inside the keyboard function if (key_pressed == THE_KEY_YOU_WANT) process_event_next_triangle(); void process_event_next_triangle() { if (triangles_to_draw &lt; maximum) ++triangles_to_draw; } void display(void) { go_next = false; glLoadIdentity(); glColor3f(1.0f, 0.0f, 0.0f); glPushMatrix(); glTranslatef(20.0f, 20.0f, -40.f); glRotatef(180.f, 0.0, 0.0, 1.0); glBegin(GL_TRIANGLES); for (int i = 0; i &lt; 3*triangles_to_draw; i += 3) { glVertex3f(pts[tri[i]], (pts[ptsLength/2 + tri[i]] - maximum) * -1, 0); glVertex3f(pts[tri[i+1]], (pts[ptsLength/2 + tri[i+1]] - maximum) * -1, 0); glVertex3f(pts[tri[i+2]], (pts[ptsLength/2 + tri[i+2]] - maximum) * -1, 0); } glEnd(); glPopMatrix(); glutSwapBuffers(); } </code></pre> <p>Note that this way, you can make the <code>process_event_next_triangle</code> as complicated as you want without affecting the <code>display</code> function. This makes life much easier when you have many keys doing different stuff.</p>