#include <GL/glut.h> /* Header fuer OpenGl utility toolkit*/
#include <stdlib.h> /* Header fuer C-Library */
GLfloat r=1.0, g=0.0, b=0.0; /* globales RGB-Tripel */
void init(void) { /* Initialisierung */
glClearColor(0.5, 0.5, 0.5, 0.0); /* setze Grau als Hintergrundfarbe */
glMatrixMode(GL_PROJECTION); /* betrifft Projektionsmatrix */
glLoadIdentity(); /* beginne mit Einheitsmatrix */
gluOrtho2D(0.0, 1.5, 0.0, 1.0); /* Orthogonalprojektions-Clip-Ebenen */
} /* in 2D: left,right,bottom, top */
void display(void){ /* Prozedur zum Zeichnen */
glClear(GL_COLOR_BUFFER_BIT); /* alle Pixel zurecksetzen */
glColor3f(r,g,b); /* Farbe gemaess RGB-Tripel */
glBegin(GL_TRIANGLES); /* Beginn eines Dreiecks */
glVertex2f(0.25, 0.25); /* links unten */
glVertex2f(0.75, 0.25); /* rechts unten */
glVertex2f(0.25, 0.75); /* links oben */
glEnd(); /* Ende des Dreiecks */
glFlush(); /* direkt ausgeben */
}
void key(unsigned char key, int x, int y){ /* Bei Tastendruck */
switch(key) { /* analysiere den Tastendruck */
case 'r': r=1.0; g=0.0; b=0.0; break; /* falls 'r': setze Tripel auf Rot */
case 'g': r=0.0; g=1.0; b=0.0; break; /* falls 'g': setze Tripel auf Gruen */
case 'b': r=0.0; g=0.0; b=1.0; break; /* falls 'b': setze Tripel auf Blau */
}
glutPostRedisplay();
}
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(112,84); /* initiale Fensterposition */
glutCreateWindow("key"); /* Fenster mit Aufschrift */
init(); /* rufe init auf */
glutDisplayFunc(display); /* registriere display */
glutKeyboardFunc(key); /* registriere key */
glutMainLoop(); /* beginne Event-Schleife */
return 0; /* ISO C verlangt Rueckgabe */
}