#include <GL/glut.h> 

void zeichne(); /* Zeichenfunktion */ 

int main(int argc, char **argv) { 
  /* GLUT initialisieren */ 
  glutInit(&argc, argv); 
  glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); 
  /* Fenster anlegen */ 
  glutInitWindowSize(400, 300); 
  glutCreateWindow("Standardtransformationen"); 
  /* Weltkoordinatensystem festlegen */ 
  glMatrixMode(GL_PROJECTION); 
  gluOrtho2D(-8, 8, -6, 6); 
  glMatrixMode(GL_MODELVIEW); 
  /* Zeichenfunktion festlegen */ 
  glutDisplayFunc(zeichne); 
  /* GLUT-Hauptschleife aufrufen */ 
  glutMainLoop(); 
  return 0; 
} 

/* Zeichenfunktion */ 
void zeichne() { 
  /* Bildschirm loeschen */ 
  glClear(GL_COLOR_BUFFER_BIT); 
  /* Trennlinien zeichnen */ 
  glBegin(GL_LINES); 
    glColor3f(1, 1, 1); 
    glVertex2f(-8, 0); 
    glVertex2f( 8, 0); 
    glVertex2f( 0, -6); 
    glVertex2f( 0, 6); 
  glEnd(); 
  /* Farbe der Rechtecke */ 
  glColor3f( 1, 1, 0); 
  /* Original zeichnen */ 
  glPushMatrix(); 
    glTranslatef(-4, 3, 0); 
    glRectf(-1.5, -1.0, 1.5, 1.0); 
  glPopMatrix(); 
  glPushMatrix(); 
    glTranslatef( 4, 3, 0); 
    /* Translation um 1 in x- und y-Richtung */ 
    glTranslatef( 1, 1, 0); 
    glRectf(-1.5, -1.0, 1.5, 1.0); 
  glPopMatrix(); 
  glPushMatrix(); 
    glTranslatef(-4, -3, 0); 
    /* Rotation um 45ø z-Achse */ 
    glRotatef(45, 0, 0, 1); 
    glRectf(-1.5, -1.0, 1.5, 1.0); 
  glPopMatrix(); 
  glPushMatrix(); 
    glTranslatef( 4, -3, 0); 
    /* Skalierung um den Faktor 2 in x-Richtung */ 
    glScalef( 2, 1, 1); 
    glRectf(-1.5, -1.0, 1.5, 1.0); 
  glPopMatrix(); 
  /* Zeichenschritte ausfuehren */ 
  glFlush(); 
} 
