/*
    polygon1.c

    - Zeichnet ein Polygon mit variabler Anzahl von Ecken (Vertizes).
    - Ändern der Eckenzahl mit <-Taste und >-Taste
      (Kleiner-Zeichen oder Komma, Größer-Zeichen oder Punkt).
    - Programmabbruch mit q-Taste - siehe keyboard_func().


    > Die prinzipielle Anordnung der Vertizes ist von points1.c übernommen.
      Was geschieht, wenn die Idee mit den verschiedenen Farben
      für unterschiedliche Vertizes hier übernommen wird? Ausprobieren!

    > Wer lieber die "richtigen" Cursortasten für die Eingabe
      benutzen will, muss glutSpecialFunc(...) benutzen und
      eine special_func() schreiben (oder von fullglut.c kopieren).
      Wie heißen die symbolischen Namen, die Glut für die
      Cursortasten verwendet? (nachlesen: man glutSpecialFunc)

    > Warum flickert die Grafik beim Neu-Zeichnen?
      Abhilfe gibt's erst in anim1.c.
*/




# include       <stdio.h>
# include       <stdlib.h>
# include       <math.h>
# include       <GL/gl.h>
# include       <GL/glut.h>



static int      n_vertices = 3;



static void     display_func (void)
/*********************************/
{
    int         i;
    float       phi,
                r = 0.7,
                x, y;

    printf ("display_func() mit %d Vertizes\n", n_vertices);

    glClearColor (1, 1, 1, 0);
    glClear (GL_COLOR_BUFFER_BIT);

    glColor3f (0, 0, 0);
    glBegin (GL_POLYGON);
    for (i = 0; i < n_vertices; i ++)
    {
        phi = 2 * M_PI * i / (float) n_vertices;
        x = r * cos (phi);
        y = r * sin (phi);
        glVertex2f (x, y);
    }
    glEnd ();

    glFlush ();
    glutReportErrors ();
}



static void     keyboard_func (unsigned char key, int x, int y)
/*************************************************************/
{
    switch (key)
    {
        case ',':
        case '<':
            if (n_vertices > 3)
                n_vertices --;
            glutPostRedisplay ();
            break;

        case '.':
        case '>':
            n_vertices ++;
            glutPostRedisplay ();
            break;

        case 'q':
        case 'Q':
            exit (0);
    }
}



extern int      main (int argc, char **argv)
/******************************************/
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_RGB);

    glutInitWindowPosition (200, 100);
    glutInitWindowSize (600, 600);
    glutCreateWindow ("polygon1");

    glutDisplayFunc (display_func);
    glutKeyboardFunc (keyboard_func);

    glutMainLoop ();

    return 0;
}


