#include <GL/glut.h>                                 /* OpenGl Utility Toolkit     */
#include <stdlib.h>                                  /* C-library                  */

int year = 0, day = 0;                               /* Variablen fuer Drehungen   */

void init(void) {
   glClearColor (0.0, 0.0, 1.0, 0.0);                /* blauer Hintergrund         */
   glShadeModel (GL_FLAT);                           /* Flatshading                */
   glMatrixMode (GL_PROJECTION);                     /* ab jetzt: Projektion       */ 
   glLoadIdentity ();                                /* lade Einheitsmatrix        */
   gluPerspective(60.0, 1.33, 1.0, 20.0);            /* Blickwinkel, w/h, near,far */
   glMatrixMode(GL_MODELVIEW);                       /* ab jetzt: Modelview        */
   glLoadIdentity();                                 /* lade Einheitsmatrix        */
   gluLookAt(-1.0,1.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);  /* Kamera,Fokussier,Up-Vektor */
  
}

void display(void){
   glClear (GL_COLOR_BUFFER_BIT);                       /* reset Pixels            */
   glColor3f (1.0, 1.0, 1.0);                           /* Farbe weiss             */
   glPushMatrix();                                      /* sichere Matrix          */
   glutWireSphere(1.0, 20, 16);                         /* zeichne die Sonne       */
   glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);           /* Drehung um Sonne        */
   glTranslatef (2.0, 0.0, 0.0);                        /* Verschiebung von Sonne  */
   glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);            /* Erd-Drehung             */
   glutWireSphere(0.2, 10, 8);                          /* zeichne die Erde        */
   glPopMatrix();                                       /* restauriere Matrix      */
   glutSwapBuffers();                                   /* tausche Puffer          */
}

void keyboard (unsigned char key, int x, int y){
   switch (key) {                                       /* abhaengig von der Taste */
     case 'd': day =(day+10) % 360; break;              /* erhoehe Tag um 10       */
     case 'y': year=(year+5) % 360; break;}             /* erhoehe Jahr um 5       */
   glutPostRedisplay();                                 /* rufe display auf        */
}

int main (int argc, char ** argv) {          /* Hauptprogramm                      */
  glutInit(&argc, argv);                     /* initialisiere GLUT                 */
  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); /* double buffer, true color          */
  glutInitWindowSize(800, 600);              /* initiale Fenstergroesse            */
  glutInitWindowPosition(0,0);               /* initiale Fensterposition           */
  glutCreateWindow("planet");                /* Fenster mit Aufschrift             */
  init(); glutDisplayFunc(display);          /* rufe init auf, registriere display */
  glutKeyboardFunc(keyboard);                /* registriere keyboard               */
  glutMainLoop();                            /* beginne Event-Schleife             */
  return 0;                                  /* ISO C verlangt Rueckgabe           */
}