/*
    lines1.c

    - Zeichnet eine einfache Figur aus Linien (basiert auf points1.c)
    - Programm-Ende durch Drücken einer Taste.


    > Wie ändert sich die Darstellung, wenn bei glBegin(...) statt
      GL_LINES nunmehr GL_LINE_STRIP oder GL_LINE_LOOP verwendet wird?

    > Die Anfangs- und Endpunkte der Linien(segmente) werden
      Vertizes genannt (daher gl"Vertex"2f). Jeder Vertex soll
      nun, ähnlich wie in points1.c, eine andere Farbe bekommen.
      Anders als in points1.c ist es hier ganz lehrreich,
      die Punkte _abwechselnd_ hell und dunkel zu machen.
      (Tip: Weniger Vertizes nehmen, statt n=100 etwa n=12.)
      Was geschieht mit der Farbe _entlang_ der Liniensegmente?

    > Was passiert mit: glLineWidth (0)? Und mit glLineWidth(...)
      zwischen glBegin(...) und glEnd().
*/



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



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

    /* printf ("display_func()\n"); */

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

    glColor3f (0, 0, 0);
    glLineWidth (3);

    glBegin (GL_LINES);
    for (i = 0; i < n; i ++)
    {
        phi = 2 * M_PI * i / (float) n;
        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)
/*************************************************************/
{
    exit (0);
}



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

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

    glutDisplayFunc (display_func);
    glutKeyboardFunc (keyboard_func);

    glutMainLoop ();

    return 0;
}


