#include #include #include using namespace std; double WIDTH = 400, HEIGHT = 400; double HMIN = -WIDTH/2, HMAX = WIDTH/2, KMIN = -HEIGHT/2, KMAX = HEIGHT/2; void drawString (GLfloat x, GLfloat y, void *font, string s) { glRasterPos3f (x, y, 0); for (int i = 0; i < s.length (); i++) glutBitmapCharacter (font, s[i]); } void display () { int n = 40; for (double i = 0; i <= n; i++) { glPushMatrix (); glTranslatef (HMIN + i * (HMAX - HMIN) / n, KMAX - i * (KMAX - KMIN) / n, 0); glRotatef (i * 360.0 / n, 0, 0, 1); glScalef (50, 50, 1); glBegin (GL_POLYGON); glColor3f (1, 0, 0); glVertex3f (0, 0, 0); glColor3f (0, 1, 0); glVertex3f (1, 0, 0); glColor3f (0, 0, 1); glVertex3f (0, 1, 0); glEnd (); glPopMatrix (); } glutSwapBuffers (); glColor3f (1, 1, 1); } void keyboard (unsigned char key, int x, int y) { if (key == 27) exit (0); // if ESC was pressed, then quit program double X = x * (HMAX - HMIN) / WIDTH + HMIN; double Y = (HEIGHT - y) * (KMAX - KMIN) / HEIGHT + KMIN; string s = " "; s[0] = key; drawString (X, Y, GLUT_BITMAP_HELVETICA_18, s); glutPostRedisplay (); } int main (int argc, char** argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (WIDTH, HEIGHT); glutInitWindowPosition (100, 100); glutCreateWindow ("Keyboard Input"); glClearColor (0, 0, 0, 0); glColor3f (1, 1, 1); glMatrixMode (GL_MODELVIEW); glOrtho(HMIN, HMAX, KMIN, KMAX, -1, 1); glClear (GL_COLOR_BUFFER_BIT); glutKeyboardFunc (keyboard); glutDisplayFunc (display); glutMainLoop (); return 0; }