#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(0,0); /* 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 */ }