====== Erste Schritte ====== Bevor Sie überhaupt etwas, auf den Bildschirm mit OpenGL bringen können, müssen Sie einige Schritte ausgeführt haben. Um die soll es hier gehen. **Includes** #ifdef _WIN32 #include #endif #ifdef __APPLE__ #include #else #include #include #endif Wichtig ist, dass Mac OSX die glut.h im Allgemeinen woanders installiert als Linux und Windows. Windows will außerdem noch die eigene Windows.h Systembibliothek haben. **Main-Funktion** int main(int argc, char* argv[]) { glutInit( &argc, (char **) argv ); glutInitDisplayMode( GLUT_SINGLE | GLUT_RGBA ); glutInitWindowSize( 250, 250 ); glutInitWindowPosition( 100, 100 ); glutCreateWindow( "hello" ); init(); glutDisplayFunc( display ); glutMainLoop(); return 0; } Gehen wir nun also den Code einmal durch. Zu Beginn wird mit //glutInit()// die GLUT initialisiert. Vorher ist es Ihnen nicht möglich Funktionen der GLUT zu verwenden. //glutInitDisplayMode()// setzt den Modus der zu zeichnenden Szene. //GLUT_SINGLE// beschreibt, dass lediglich ein einfach gepuffertes Bild erzeugt wird und //GLUT_RGBA// gibt an, dass die Farben jeweils Rot, Grün, Blau und einen Alphawert haben. //glutInitWindowSize()// setzt die Größe des Fenster; //glutInitWindowPosition()// die Position des Fensters auf dem Bildschirm. //glutCreateWindow()// erzeugt schließlich das oben beschriebene Fenster mit dem Titeltext "hello". **Init-Funktion** void init(void ) { /* legt die Farbe nach dem Löschen fest */ glClearColor( 0.0, 0.0, 0.0, 0.0 ); /* initialisieren des Viewports */ glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 ); } //glClearColor()// legt die Farbe fest, die das Bild nach dem Löschen mit //glClear()// haben soll. //glMatrixMode()// setzt den Matrix-Modus auf Projektion, //glLoadIdentity()// leert den Matrixstack und //glOrtho()// tut Dinge. FIXME glutDisplayFunc( display ); glutMainLoop(); Die Callback-Funktion //glutDisplayFunc()// legt die Funktion fest, welche das Bild aufbaut und zeichnet. Sie wird immer wieder aufgerufen - sodass das Bild immer wieder aktualisiert wird. //glutMainLoop()// versetzt das Programm in eine Endlosschleife, in der es das Bild immer wieder neu zeichnet und aktualisiert. **Display-Funktion** void display( void ) { // lösche alle Pixel glClear( GL_COLOR_BUFFER_BIT ); /* Zeichne ein weißes Polygon (in dem Fall Rechteck) mit Ecken auf * (0.25, 0.25, 0) und (0.75, 0.75, 0.0) */ glColor3f( 1.0, 1.0, 1.0 ); glBegin( GL_POLYGON ); glVertex3f( 0.25, 0.25, 0.0 ); glVertex3f( 0.75, 0.25, 0.0 ); glVertex3f( 0.75, 0.75, 0.0 ); glVertex3f( 0.25, 0.75, 0.0 ); glEnd(); // beginne die gepufferten OpenGL Routinen auszuführen glFlush(); } //glClear()// löscht das aktuell auf dem Fenster aufgebrachte Bild und füllt es mit der Standardfarbe (siehe oben). //glColor3f// und //glVertex3f// werden später genauer behandelt. Sie kümmern sich prinzipiell darum, dass das Viereck auf dem Bildschirm gezeichnet wird. //glFlush()// führt dazu, dass alle von OpenGL irgendwo gepufferten Aufgaben so schnell wie möglich ausgeführt werden. Auch wenn das nicht innerhalb der festgelegten Zeitspanne geschehen kann, werden die Puffer gelöscht.