#include <GL/glut.h> #include <stdlib.h> void init(void) { GLfloat mat_diffuse[] = { 1.0, 0.3, 0.3, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv (GL_FRONT, GL_SHININESS, mat_shininess); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void reshape (int w, int h){ GLfloat p = (GLfloat) w / (GLfloat) h; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (p > 1.0) glOrtho(-2*p,2*p,-1.5,1.5,-10.0,10.0); else glOrtho(-1.5,1.5,-2/p,2/p,-10.0,10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(-40.0, 0.0, 1.0, 0.0); glRotatef( 20.0, 1.0, 0.0, 0.0); glutSolidTeapot(1.0); glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize (800, 600); glutInitWindowPosition (0,0); glutCreateWindow ("teapot"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }