#include GLfloat light_position[] = {100.0f, 100.0f, 100.0f, 1.0f}; // Setup diffuse property GLfloat diffuse_light[] = {0.9f, 0.9f, 0.9f, 0.0f}; // Setup ambient property GLfloat ambient_light[] = {0.2f, 0.2f, 0.2f, 0.0f}; // Setup specular property GLfloat specular_light[] = {0.5f, 0.5f, 0.5f, 0.0f}; GLfloat brass_ambient[]={0.33, 0.22, 0.03, 1.0}; GLfloat brass_diffuse[]={0.78, 0.57, 0.11, 1.0}; GLfloat brass_specular[]={0.99, 0.91, 0.81, 1.0}; GLfloat brass_shininess = 27.8; float deg = 0; void brass() { glMaterialfv(GL_FRONT, GL_AMBIENT, brass_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, brass_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, brass_specular); glMaterialf(GL_FRONT, GL_SHININESS, brass_shininess); } void display() { glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glTranslatef(0.0, 0.0, -5.0); glRotatef (deg, 0.0, 1.0, 0.0); brass(); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glutSolidTeapot(1.0); glPopMatrix(); glutSwapBuffers(); glFlush(); } void idleFunc() { deg += 0.3; glutPostRedisplay(); } void setupLights() { glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse_light); glLightfv (GL_LIGHT0, GL_AMBIENT, ambient_light); glLightfv (GL_LIGHT0, GL_SPECULAR, specular_light); } void setupCamera() { glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0f, 1.0f, 0.1f, 1000.0f); glMatrixMode (GL_MODELVIEW); } void setupWindow() { glutInitDisplayMode (GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH); glutInitWindowPosition(30, 30); glutInitWindowSize (400, 400); glutCreateWindow ("Brass Teapot"); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glutDisplayFunc(display); glutIdleFunc(idleFunc); } void main (int argv, char** argc) { glutInit(&argv, argc); setupWindow(); setupCamera(); setupLights(); glutMainLoop(); }