/*
 *   OpenGL Fraktal-Stern
 *   Norman Walter, Universität Stuttgart
 *   Datum: 20.8.2001
 *
 *   Implementierung nach einem Beispiel aus dem Buch
 *   "Algorithmen in C". Die graphische Ausgabe
 *   erfolgt mittels OpenGL.
 */

#include <stdio.h>
#include <GL/glut.h>

void malen(void);
void box(int x,int y,int r);
void star(int x,int y,int r);

int main (int argc, char **argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(400, 300);
 glutInitWindowPosition(100, 100);
 glutCreateWindow("OpenGL Fraktal-Stern");
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glOrtho(0.0, 400, 0.0, 300, -1.0, 1.0);
 glutDisplayFunc(&malen);
 glutMainLoop();
 return(0);
}

void malen(void)
{
  /* Fensterinhalt löschen */
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(1.0,1.0,1.0);

  star(200,150,80);

  glFlush();
  glutSwapBuffers();
}

void box(int x, int y, int r)

{
   /* Zeichnet ein Quadrat mit Radius r an den Koordinaten x,y */

   glRectf(x-r,y+r,x+r,y-r);
}

void star( int x, int y, int r)

   /* Zeichnet Fraktalstern durch rekursive Funktionsaufrufe */

{
    if (r>0)
        {
            star(x-r,y+r,r/2);
            star(x+r,y+r,r/2);
            star(x-r,y-r,r/2);
            star(x+r,y-r,r/2);
            box(x,y,r);
        }

}

