#include <GL/glut.h> /* OpenGl Utility Toolkit */ #include <stdlib.h> /* C-library */ int year = 0, day = 0; /* Variablen fuer Drehungen */ void init(void) { glClearColor (0.0, 0.0, 1.0, 0.0); /* blauer Hintergrund */ glShadeModel (GL_FLAT); /* Flatshading */ glMatrixMode (GL_PROJECTION); /* ab jetzt: Projektion */ glLoadIdentity (); /* lade Einheitsmatrix */ gluPerspective(60.0, 1.33, 1.0, 20.0); /* Blickwinkel, w/h, near,far */ glMatrixMode(GL_MODELVIEW); /* ab jetzt: Modelview */ glLoadIdentity(); /* lade Einheitsmatrix */ gluLookAt(-1.0,1.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); /* Kamera,Fokussier,Up-Vektor */ } void display(void){ glClear (GL_COLOR_BUFFER_BIT); /* reset Pixels */ glColor3f (1.0, 1.0, 1.0); /* Farbe weiss */ glPushMatrix(); /* sichere Matrix */ glutWireSphere(1.0, 20, 16); /* zeichne die Sonne */ glRotatef ((GLfloat) year, 0.0, 1.0, 0.0); /* Drehung um Sonne */ glTranslatef (2.0, 0.0, 0.0); /* Verschiebung von Sonne */ glRotatef ((GLfloat) day, 0.0, 1.0, 0.0); /* Erd-Drehung */ glutWireSphere(0.2, 10, 8); /* zeichne die Erde */ glPopMatrix(); /* restauriere Matrix */ glutSwapBuffers(); /* tausche Puffer */ } void keyboard (unsigned char key, int x, int y){ switch (key) { /* abhaengig von der Taste */ case 'd': day =(day+10) % 360; break; /* erhoehe Tag um 10 */ case 'y': year=(year+5) % 360; break;} /* erhoehe Jahr um 5 */ glutPostRedisplay(); /* rufe display auf */ } int main (int argc, char ** argv) { /* Hauptprogramm */ glutInit(&argc, argv); /* initialisiere GLUT */ glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); /* double buffer, true color */ glutInitWindowSize(800, 600); /* initiale Fenstergroesse */ glutInitWindowPosition(0,0); /* initiale Fensterposition */ glutCreateWindow("planet"); /* Fenster mit Aufschrift */ init(); glutDisplayFunc(display); /* rufe init auf, registriere display */ glutKeyboardFunc(keyboard); /* registriere keyboard */ glutMainLoop(); /* beginne Event-Schleife */ return 0; /* ISO C verlangt Rueckgabe */ }