#include <GL/glut.h> /* OpenGl Utiltiy Toolkit */
#include <stdlib.h> /* C-library */
void init(void) {
GLfloat mat_diffuse[] = { 1.0, 0.3, 0.3, 1.0 }; /* diffuse Farbe */
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; /* spekulare Farbe */
GLfloat mat_shininess[] = { 50.0 }; /* Reflexionskoeffizient */
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; /* Lichtquellenposition */
glClearColor (0.0, 0.0, 0.0, 0.0); /* Hintergrundfarbe */
glShadeModel (GL_SMOOTH); /* smooth shading */
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); /* diffuse Farbzuweisung */
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); /* spekulare Farbzuweisung*/
glMaterialfv(GL_FRONT, GL_SHININESS,mat_shininess); /* Reflexionszuweisung */
glLightfv (GL_LIGHT0,GL_POSITION, light_position); /* Lichtpositionszuweisung*/
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* Beleuchtung aktivieren */
glEnable(GL_DEPTH_TEST); /* Tiefentest aktiveren */
glMatrixMode (GL_PROJECTION); /* ab jetzt Projektion */
glLoadIdentity(); /* lade Einheitsmatrix */
glOrtho(-2.0,2.0,-1.5,1.5,-10.0,10.0); /* links,rechts,unten,oben*/
glMatrixMode(GL_MODELVIEW); /* ab jetzt Modelview */
glLoadIdentity(); /* lade Einheitsmatrix */
glRotatef( 20.0, 1.0, 0.0, 0.0); /* 20 Grad um x-Achse */
}
void display(void) {
glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /* reset Buffer */
glRotatef((GLfloat) 1, 0.0, 1.0, 0.2); /* 1 Grad um Drehachse */
glutSolidTeapot(1); /* zeichne Teapot */
glutSwapBuffers(); /* wechsele Puffer */
}
int main(int argc, char** argv) {
glutInit(&argc, argv); /* initialisiere GLUT */
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); /* Double buffer, ... */
glutInitWindowSize (800, 600); /* init. Fenstergroesse */
glutInitWindowPosition (0,0); /* init. Fensterposition */
glutCreateWindow ("teapot-rotate"); /* Fenster mit Aufschrift */
init (); /* Initialisierung */
glutDisplayFunc(display); /* registriere display */
glutIdleFunc(display); /* bei Leerlauf: display */
glutMainLoop(); /* starte Hauptschleife */
return(0);
}