#include <GL/glut.h>                         /* Header fuer OpenGl utility toolkit */
#include <stdlib.h>                          /* Header fuer C-Library              */

void init(void) {                            /* Initialisierung                    */
  glClearColor(0.0, 0.0, 1.0, 0.0);          /* setze Blau als Hintergrundfarbe    */
  glMatrixMode(GL_PROJECTION);               /* ab jetzt: Projektionsmatrix        */
  glLoadIdentity();                          /* lade Einheitsmatrix                */
  glFrustum(-2,2,-1.5,1.5,2,20);             /* left,right,bottom,top,near,far     */
}

void display(void){                          /* Prozedur zum Zeichnen              */
  glClear(GL_COLOR_BUFFER_BIT);              /* alle Pixel zurecksetzen            */
  glMatrixMode(GL_MODELVIEW);                /* ab jetzt:  Modellierungsmatrix     */
  glColor3f(1.0, 1.0, 0.0);                  /* Farbe gelb                         */
  glLoadIdentity();                          /* Einheitsmatrix                     */
 
  glTranslatef(0.0,0.0,-5.0);                /* verschiebe 5 Einheiten nach hinten */
  glScalef(1.0, 1.5, 1.0);                   /* Skalierung in 3 Dimensionen        */
  glRotatef(30.0, 0.0, 1.0, 0.0);            /* rotiere 30 Grad um y-Achse         */
  glutWireCube(2.0);                         /* Drahtgitterwuerfel                 */
  glFlush();                                 /* direkt ausgeben                    */
}

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