#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 (0.0,0.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 */
glRotatef(10.0, 0.0, 1.0, 0.0); /* drehe 30 Grad um y */
glRotatef(10.0, 1.0, 0.0, 0.0); /* drehe 30 Grad um x */
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(112,84); /* 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 */
}