/* Dackral Phillips CSE 540 Lab #4 Section A This is a 3D model of a Sun machine. The model was taken from the very machine on which I now type. Lighting has been added and can be toggled with the 2 and 3 keys. A singular light has also been added that remains on. In addition, the user can increase/decrease the amount of ambient lighting using the + and - keys. The old functionality is still in tact in that the object can be spun with the arrow keys, and the view mode can be toggled between solid and wireframe using the w & s keys. */ #include #include #include static GLfloat u = 0.0; static GLfloat v = 0.0; static GLfloat ambient[]={0.2, 0.2, 0.2, 1.0}; static GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; static GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; static GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; static GLfloat red_diffuse[] = {1.0, 0.0, 0.0, 1.0}; static GLfloat green_diffuse[] = {0.0, 1.0, 0.0, 1.0}; static GLfloat light_position[]={0.0, 0.0, 1.0, 0.0}; static GLfloat light_position2[]={1.0, 0.0, 0.0, 0.0}; static GLfloat light_position3[]={-1.0, 0.0, 0.0, 0.0}; void init() { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glShadeModel(GL_SMOOTH); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_LIGHTING); } void reshape(GLsizei w, GLsizei h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (90.0, (GLdouble)w/(GLdouble)h, 1.0, 500.0); gluLookAt(0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, red_diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT1, GL_POSITION, light_position2); glLightfv(GL_LIGHT2, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT2, GL_DIFFUSE, green_diffuse); glLightfv(GL_LIGHT2, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT2, GL_POSITION, light_position3); glEnable(GL_LIGHT0); glPushMatrix(); glRotatef(u, 1.0, 0.0, 0.0); glRotatef(v, 0.0, 1.0, 0.0); /* Body of a Sun box */ glBegin(GL_QUADS); /* Main box */ glColor3f(0.7, 0.7, 0.7); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-20.0, -18.0, -10.0); glVertex3f(-20.0, -8.0, -10.0); glVertex3f(20.0, -8.0, -10.0); glVertex3f(20.0, -18.0, -10.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-20.0, -18.0, 7.0); glVertex3f(-20.0, -8.0, 7.0); glVertex3f(-20.0, -8.0, -10.0); glVertex3f(-20.0, -18.0, -10.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(20.0, -18.0, -10.0); glVertex3f(20.0, -8.0, -10.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(20.0, -18.0, 7.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(20.0, -18.0, 7.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(-20.0, -8.0, 7.0); glVertex3f(-20.0, -18.0, 7.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(20.0, -8.0, -10.0); glVertex3f(-20.0, -8.0, -10.0); glVertex3f(-20.0, -8.0, 7.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(20.0, -18.0, -10.0); glVertex3f(20.0, -18.0, 7.0); glVertex3f(-20.0, -18.0, 7.0); glVertex3f(-20.0, -18.0, -10.0); /* front rectangle (drive holder) */ glNormal3f(0.0, 0.0, 1.0); glVertex3f(20.0, -14.0, 10.0); glVertex3f(20.0, -8.0, 10.0); glVertex3f(-20.0, -8.0, 10.0); glVertex3f(-20.0, -14.0, 10.0); glColor3f(0.7, 0.7, 0.7); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-20.0, -14.0, 7.0); glVertex3f(-20.0, -8.0, 7.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(20.0, -14.0, 7.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(20.0, -8.0, 10.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(-20.0, -8.0, 7.0); glVertex3f(-20.0, -8.0, 10.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(20.0, -14.0, 7.0); glVertex3f(20.0, -14.0, 10.0); glVertex3f(-20.0, -14.0, 10.0); glVertex3f(-20.0, -14.0, 7.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-20.0, -14.0, 10.0); glVertex3f(-20.0, -8.0, 10.0); glVertex3f(-20.0, -8.0, 7.0); glVertex3f(-20.0, -14.0, 7.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(20.0, -14.0, 7.0); glVertex3f(20.0, -8.0, 7.0); glVertex3f(20.0, -8.0, 10.0); glVertex3f(20.0, -14.0, 10.0); /* triangles */ glColor3f(0.75, 0.6, 1.0); glNormal3f(-0.6643638388, 0.0, 0.7474093187); glVertex3f(20.5, -19.0, 10.0); glVertex3f(20.5, -14.0, 10.0); glVertex3f(16.0, -14.0, 6.0); glVertex3f(16.0, -19.0, 6.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(20.5, -19.0, 6.0); glVertex3f(20.5, -14.0, 6.0); glVertex3f(20.5, -14.0, 10.0); glVertex3f(20.5, -19.0, 10.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(16.0, -19.0, 6.0); glVertex3f(16.0, -14.0, 6.0); glVertex3f(20.5, -14.0, 6.0); glVertex3f(20.5, -19.0, 6.0); glNormal3f(0.6643638388, 0.0, 0.7474093187); glVertex3f(-16.0, -19.0, 6.0); glVertex3f(-16.0, -14.0, 6.0); glVertex3f(-20.5, -14.0, 10.0); glVertex3f(-20.5, -19.0, 10.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-20.5, -19.0, 10.0); glVertex3f(-20.5, -14.0, 10.0); glVertex3f(-20.5, -14.0, 6.0); glVertex3f(-20.5, -19.0, 6.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-20.5, -19.0, 6.0); glVertex3f(-20.5, -14.0, 6.0); glVertex3f(-16.0, -14.0, 6.0); glVertex3f(-16.0, -19.0, 6.0); glEnd(); glBegin(GL_TRIANGLES); glNormal3f(0.0, 1.0, 0.0); glVertex3f(20.5, -14.0, 10.0); glVertex3f(20.5, -14.0, 6.0); glVertex3f(16.0, -14.0, 6.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(16.0, -19.0, 6.0); glVertex3f(20.5, -19.0, 6.0); glVertex3f(20.5, -19.0, 10.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(-16.0, -14.0, 6.0); glVertex3f(-20.5, -14.0, 6.0); glVertex3f(-20.5, -14.0, 10.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(-20.5, -19.0, 10.0); glVertex3f(-20.5, -19.0, 6.0); glVertex3f(-16.0, -19.0, 6.0); glEnd(); /* Draw the Power Switch */ glBegin(GL_QUADS); glColor3f(0.0, 1.0, 0.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(18.5, -10.25, 10.02); glVertex3f(18.5, -10.0, 10.02); glVertex3f(17.5, -10.0, 10.02); glVertex3f(17.5, -10.25, 10.02); glEnd(); glPushMatrix(); glColor3f(0.7, 0.7, 0.7); glTranslatef(18.0, -12.0, 10.0); glutSolidSphere(0.5, 10.0, 8.0); glPopMatrix(); /* CD Drive */ glBegin(GL_QUADS); glColor3f(0.69, 0.69, 0.69); glNormal3f(0.0, 0.0, -1.0); glVertex3f(3.0, -13.0, 0.0); glVertex3f(3.0, -9.0, 0.0); glVertex3f(16.0, -9.0, 0.0); glVertex3f(16.0, -13.0, 0.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(16.0, -13.0, 10.01); glVertex3f(16.0, -9.0, 10.01); glVertex3f(3.0, -9.0, 10.01); glVertex3f(3.0, -13.0, 10.01); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(3.0, -13.0, 10.01); glVertex3f(3.0, -9.0, 10.01); glVertex3f(3.0, -9.0, 0.0); glVertex3f(3.0, -13.0, 0.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(16.0, -13.0, 0.0); glVertex3f(16.0, -9.0, 0.0); glVertex3f(16.0, -9.0, 10.1); glVertex3f(16.0, -13.0, 10.1); glNormal3f(0.0, 1.0, 0.0); glVertex3f(16.0, -9.0, 10.01); glVertex3f(16.0, -9.0, 0.0); glVertex3f(3.0, -9.0, 0.0); glVertex3f(3.0, -9.0, 10.01); glNormal3f(0.0, -1.0, 0.0); glVertex3f(16.0, -13.0, 0.0); glVertex3f(16.0, -13.0, 10.01); glVertex3f(3.0, -13.0, 10.01); glVertex3f(3.0, -13.0, 0.0); /* Buttons */ glNormal3f(0.0, 0.0, 1.0); glVertex3f(14.5, -12.25, 10.5); glVertex3f(14.5, -12.0, 10.5); glVertex3f(14.0, -12.0, 10.5); glVertex3f(14.0, -12.25, 10.5); glNormal3f(0.0, 0.0, -1.0); glVertex3f(14.0, -12.25, 10.0); glVertex3f(14.0, -12.0, 10.0); glVertex3f(14.5, -12.0, 10.0); glVertex3f(14.5, -12.25, 10.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(14.5, -12.25, 10.0); glVertex3f(14.5, -12.0, 10.0); glVertex3f(14.5, -12.0, 10.5); glVertex3f(14.5, -12.25, 10.5); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(14.0, -12.25, 10.5); glVertex3f(14.0, -12.0, 10.5); glVertex3f(14.0, -12.0, 10.0); glVertex3f(14.0, -12.25, 10.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(14.5, -12.0, 10.5); glVertex3f(14.5, -12.0, 10.0); glVertex3f(14.0, -12.0, 10.0); glVertex3f(14.0, -12.0, 10.5); glNormal3f(0.0, -1.0, 0.0); glVertex3f(14.5, -12.25, 10.0); glVertex3f(14.5, -12.25, 10.5); glVertex3f(14.0, -12.25, 10.5); glVertex3f(14.0, -12.25, 10.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(13.75, -12.25, 10.5); glVertex3f(13.75, -12.0, 10.5); glVertex3f(13.25, -12.0, 10.5); glVertex3f(13.25, -12.25, 10.5); glNormal3f(0.0, 0.0, -1.0); glVertex3f(13.25, -12.25, 10.0); glVertex3f(13.25, -12.0, 10.0); glVertex3f(13.75, -12.0, 10.0); glVertex3f(13.75, -12.25, 10.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(13.75, -12.25, 10.0); glVertex3f(13.75, -12.0, 10.0); glVertex3f(13.75, -12.0, 10.5); glVertex3f(13.75, -12.25, 10.5); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(13.25, -12.25, 10.5); glVertex3f(13.25, -12.0, 10.5); glVertex3f(13.25, -12.0, 10.0); glVertex3f(13.25, -12.25, 10.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(13.75, -12.0, 10.5); glVertex3f(13.75, -12.0, 10.0); glVertex3f(13.25, -12.0, 10.0); glVertex3f(13.25, -12.0, 10.5); glNormal3f(0.0, -1.0, 0.0); glVertex3f(13.75, -12.25, 10.0); glVertex3f(13.75, -12.25, 10.5); glVertex3f(13.25, -12.25, 10.5); glVertex3f(13.25, -12.25, 10.0); glColor3f(0.8, 0.8, 0.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(13.0, -12.25, 10.02); glVertex3f(13.0, -12.0, 10.02); glVertex3f(12.25, -12.0, 10.02); glVertex3f(12.25, -12.25, 10.02); glColor3f(0.0, 0.0, 0.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(9.0, -12.25, 10.02); glVertex3f(9.0, -12.0, 10.02); glVertex3f(7.5, -12.0, 10.02); glVertex3f(7.5, -12.25, 10.02); glColor3f(0.8, 0.8, 0.8); glNormal3f(0.0, 0.0, -1.0); glVertex3f(7.6, -12.4, 10.03); glVertex3f(7.6, -12.1, 10.03); glVertex3f(8.9, -12.1, 10.03); glVertex3f(8.9, -12.4, 10.03); glNormal3f(-0.8166540584, 0.0, -0.5212685479); glVertex3f(8.6, -12.4, 10.5); glVertex3f(8.6, -12.1, 10.5); glVertex3f(8.9, -12.1, 10.03); glVertex3f(8.9, -12.4, 10.03); glNormal3f(0.8166540584, 0.0, -0.5212685479); glVertex3f(7.9, -12.1, 10.5); glVertex3f(7.9, -12.4, 10.5); glVertex3f(7.6, -12.4, 10.03); glVertex3f(7.6, -12.1, 10.03); glNormal3f(0.0, 0.0, 1.0); glVertex3f(8.6, -12.1, 10.5); glVertex3f(8.6, -12.4, 10.5); glVertex3f(7.9, -12.4, 10.5); glVertex3f(7.9, -12.1, 10.5); glNormal3f(0.0, -1.0, 0.0); glVertex3f(8.9, -12.4, 10.03); glVertex3f(8.6, -12.4, 10.5); glVertex3f(7.6, -12.4, 10.5); glVertex3f(7.9, -12.4, 10.03); glNormal3f(0.0, 1.0, 0.0); glVertex3f(8.6, -12.1, 10.5); glVertex3f(8.9, -12.1, 10.03); glVertex3f(7.9, -12.1, 10.03); glVertex3f(7.6, -12.1, 10.5); /* END */ glColor3f(0.68, 0.68, 0.68); glNormal3f(0.0, 0.0, -1.0); glVertex3f(4.0, -11.5, 3.0); glVertex3f(4.0, -9.5, 3.0); glVertex3f(15.0, -9.5, 3.0); glVertex3f(15.0, -11.5, 3.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(15.0, -11.5, 10.02); glVertex3f(15.0, -9.5, 10.02); glVertex3f(4.0, -9.5, 10.02); glVertex3f(4.0, -11.5, 10.02); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(4.0, -11.5, 10.02); glVertex3f(4.0, -9.5, 10.02); glVertex3f(4.0, -9.5, 3.0); glVertex3f(4.0, -11.5, 3.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(15.0, -11.5, 3.0); glVertex3f(15.0, -9.5, 3.0); glVertex3f(15.0, -9.5, 10.2); glVertex3f(15.0, -11.5, 10.2); glNormal3f(0.0, 1.0, 0.0); glVertex3f(15.0, -9.5, 10.02); glVertex3f(15.0, -9.5, 3.0); glVertex3f(4.0, -9.5, 3.0); glVertex3f(4.0, -9.5, 10.02); glNormal3f(0.0, -1.0, 0.0); glVertex3f(15.0, -11.5, 3.0); glVertex3f(15.0, -11.5, 10.02); glVertex3f(4.0, -11.5, 10.02); glVertex3f(4.0, -11.5, 3.0); glEnd(); /* Floppy Drive */ glBegin(GL_QUADS); glColor3f(0.69, 0.69, 0.69); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-7.0, -11.0, 4.0); glVertex3f(-7.0, -9.0, 4.0); glVertex3f(1.0, -9.0, 4.0); glVertex3f(1.0, -11.0, 4.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(1.0, -11.0, 10.01); glVertex3f(1.0, -9.0, 10.01); glVertex3f(-7.0, -9.0, 10.01); glVertex3f(-7.0, -11.0, 10.01); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-7.0, -11.0, 10.01); glVertex3f(-7.0, -9.0, 10.01); glVertex3f(-7.0, -9.0, 4.0); glVertex3f(-7.0, -11.0, 4.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(1.0, -11.0, 4.0); glVertex3f(1.0, -9.0, 4.0); glVertex3f(1.0, -9.0, 10.01); glVertex3f(1.0, -11.0, 10.01); glNormal3f(0.0, 1.0, 0.0); glVertex3f(1.0, -9.0, 10.01); glVertex3f(1.0, -9.0, 4.0); glVertex3f(-7.0, -9.0, 4.0); glVertex3f(-7.0, -9.0, 10.01); glNormal3f(0.0, -1.0, 0.0); glVertex3f(1.0, -11.0, 4.0); glVertex3f(1.0, -11.0, 10.01); glVertex3f(-7.0, -11.0, 10.01); glVertex3f(-7.0, -11.0, 4.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-7.0, -13.0, 2.0); glVertex3f(-7.0, -11.0, 2.0); glVertex3f(1.0, -11.0, 2.0); glVertex3f(1.0, -13.0, 2.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(1.0, -13.0, 10.01); glVertex3f(1.0, -11.0, 10.01); glVertex3f(-7.0, -11.0, 10.01); glVertex3f(-7.0, -13.0, 10.01); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-7.0, -13.0, 10.01); glVertex3f(-7.0, -11.0, 10.01); glVertex3f(-7.0, -11.0, 2.0); glVertex3f(-7.0, -13.0, 2.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(1.0, -13.0, 2.0); glVertex3f(1.0, -11.0, 2.0); glVertex3f(1.0, -11.0, 10.01); glVertex3f(1.0, -13.0, 10.01); glNormal3f(0.0, 1.0, 0.0); glVertex3f(1.0, -11.0, 10.01); glVertex3f(1.0, -11.0, 2.0); glVertex3f(-7.0, -11.0, 2.0); glVertex3f(-7.0, -11.0, 10.01); glNormal3f(0.0, -1.0, 0.0); glVertex3f(1.0, -13.0, 2.0); glVertex3f(1.0, -13.0, 10.01); glVertex3f(-7.0, -13.0, 10.01); glVertex3f(-7.0, -13.0, 2.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-1.0, -12.5, 10.02); glVertex3f(-1.0, -12.0, 10.02); glVertex3f(0.0, -12.0, 10.02); glVertex3f(0.0, -12.5, 10.02); glNormal3f(0.0, 0.0, 1.0); glVertex3f(0.0, -12.5, 10.5); glVertex3f(0.0, -12.0, 10.5); glVertex3f(-1.0, -12.0, 10.5); glVertex3f(-1.0, -12.5, 10.5); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-1.0, -12.5, 10.5); glVertex3f(-1.0, -12.0, 10.5); glVertex3f(-1.0, -12.0, 10.02); glVertex3f(-1.0, -12.5, 10.02); glNormal3f(1.0, 0.0, 0.0); glVertex3f(0.0, -12.5, 10.02); glVertex3f(0.0, -12.0, 10.02); glVertex3f(0.0, -12.0, 10.5); glVertex3f(0.0, -12.5, 10.5); glNormal3f(0.0, 1.0, 0.0); glVertex3f(0.0, -12.0, 10.5); glVertex3f(0.0, -12.0, 10.02); glVertex3f(-1.0, -12.0, 10.02); glVertex3f(-1.0, -12.0, 10.5); glNormal3f(0.0, -1.0, 0.0); glVertex3f(0.0, -12.5, 10.02); glVertex3f(0.0, -12.5, 10.5); glVertex3f(-1.0, -12.5, 10.5); glVertex3f(-1.0, -12.5, 10.02); glEnd(); /* Drive Door */ glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, 1.0); glColor3f(0.67, 0.67, 0.67); glVertex3f(0.5, -12.0, 10.02); glVertex3f(0.5, -11.25, 10.02); glVertex3f(-6.5, -11.25, 10.02); glVertex3f(-6.5, -12.0, 10.02); glVertex3f(-4.5, -12.0, 10.02); glVertex3f(-4.5, -12.25, 10.02); glVertex3f(-1.5, -12.25, 10.02); glVertex3f(-1.5, -12.0, 10.02); glEnd(); /* Draw Monitor */ glBegin(GL_QUADS); glColor3f(0.7, 0.7, 0.7); glNormal3f(0.0, -1.0, 0.0); glVertex3f(8, -7.99, -8); glVertex3f(8, -7.99, 8); glVertex3f(-8, -7.99, 8); glVertex3f(-8, -7.99, -8); glNormal3f(0.0, 1.0, 0.0); glVertex3f(8, -6.00, 8); glVertex3f(8, -6.00, -8); glVertex3f(-8, -6.00, -8); glVertex3f(-8, -6.00, 8); glNormal3f(0.0, 0.0, 1.0); glVertex3f(8, -7.99, 8); glVertex3f(8, -6.0, 8); glVertex3f(-8, -6.0, 8); glVertex3f(-8, -7.99, 8); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-8, -7.99, -8); glVertex3f(-8, -6.0, -8); glVertex3f(8, -6.0, -8); glVertex3f(8, -7.99, -8); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-8, -7.99, 8); glVertex3f(-8, -6.0, 8); glVertex3f(-8, -6.0, -8); glVertex3f(-8, -7.99, -8); glNormal3f(1.0, 0.0, 0.0); glVertex3f(8, -7.99, -8); glVertex3f(8, -6.0, -8); glVertex3f(8, -6.0, 8); glVertex3f(8, -7.99, 8); glColor3f(0.6, 0.6, 0.6); glNormal3f(0.0, 0.0, 1.0); glVertex3f(10, -2.99, 4); glVertex3f(10, 17.01, 4); glVertex3f(-10, 17.01, 4); glVertex3f(-10, -2.99, 4); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-5, 3.01, -10); glVertex3f(-5, 12.01, -10); glVertex3f(5, 12.01, -10); glVertex3f(5, 3.01, -10); glNormal3f(0.0, 0.9417419116, -0.336336397); glVertex3f(10, 17.01, 4); glVertex3f(5, 12.01, -10); glVertex3f(-5, 12.01, -10); glVertex3f(-10, 17.01, 4); glNormal3f(0.0, -0.91914503, -0.3939192986); glVertex3f(-10, -2.99, 4); glVertex3f(-5, 3.01, -10); glVertex3f(5, 3.01, -10); glVertex3f(10, -2.99, 4); glNormal3f(0.9417419116, 0.0, -0.336336397); glVertex3f(5, 3.01, -10); glVertex3f(5, 12.01, -10); glVertex3f(10, 17.01, 4); glVertex3f(10, -2.99, 4); glNormal3f(-0.9417419116, 0.0, -0.336336397); glVertex3f(-10, -2.99, 4); glVertex3f(-10, 17.01, 4); glVertex3f(-5, 12.01, -10); glVertex3f(-5, 3.01, -10); glColor3f(0.7, 0.7, 0.7); glNormal3f(0.0, 0.0, 1.0); glVertex3f(12, -5.99, 10); glVertex3f(12, -2.99, 10); glVertex3f(-12, -2.99, 10); glVertex3f(-12, -5.99, 10); glNormal3f(0.0, 0.0, 1.0); glVertex3f(12, 16.01, 10); glVertex3f(12, 19.01, 10); glVertex3f(-12, 19.01, 10); glVertex3f(-12, 16.01, 10); glNormal3f(0.0, 0.0, 1.0); glVertex3f(-9, -2.99, 10); glVertex3f(-9, 16.01, 10); glVertex3f(-12, 16.01, 10); glVertex3f(-12, -2.99, 10); glNormal3f(0.0, 0.0, 1.0); glVertex3f(12, -2.99, 10); glVertex3f(12, 16.01, 10); glVertex3f(9, 16.01, 10); glVertex3f(9, -2.99, 10); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-12, -5.99, 4); glVertex3f(-12, 19.01, 4); glVertex3f(12, 19.01, 4); glVertex3f(12, -5.99, 4); glNormal3f(1.0, 0.0, 0.0); glVertex3f(12, -5.99, 4.0); glVertex3f(12, 19.01, 4.0); glVertex3f(12, 19.01, 10.0); glVertex3f(12, -5.99, 10.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-12, -5.99, 10.0); glVertex3f(-12, 19.01, 10.0); glVertex3f(-12, 19.01, 4.0); glVertex3f(-12, -5.99, 4.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(12, 19.01, 10); glVertex3f(12, 19.01, 4); glVertex3f(-12, 19.01, 4); glVertex3f(-12, 19.01, 10); glNormal3f(0.0, -1.0, 0.0); glVertex3f(12, -5.99, 4); glVertex3f(12, -5.99, 10); glVertex3f(-12, -5.99, 10); glVertex3f(-12, -5.99, 4); glColor3f(1.0, 1.0, 1.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-9, -2.99, 10); glVertex3f(-9, 16.01, 10); glVertex3f(9, 16.01, 10); glVertex3f(9, -2.99, 10); glNormal3f(0.0, 0.0, 1.0); glVertex3f(8, -1.99, 11); glVertex3f(8, 15.01, 11); glVertex3f(-8, 15.01, 11); glVertex3f(-8, -1.99, 11); glNormal3f(0.7071067812, 0.0, 0.7071067812); glVertex3f(9, -2.99, 10); glVertex3f(9, 16.01, 10); glVertex3f(8, 15.01, 11); glVertex3f(8, -1.99, 11); glNormal3f(-0.7071067812, 0.0, 0.7071067812); glVertex3f(-8, -1.99, 11); glVertex3f(-8, 15.01, 11); glVertex3f(-9, 16.01, 10); glVertex3f(-9, -2.99, 10); glNormal3f(0.0, 0.7071067812, 0.7071067812); glVertex3f(8, 15.01, 11); glVertex3f(9, 16.01, 10); glVertex3f(-9, 16.01, 10); glVertex3f(-8, 15.01, 11); glNormal3f(0.0, -0.7071067812, 0.7071067812); glVertex3f(9, -2.99, 10); glVertex3f(8, -1.99, 11); glVertex3f(-8, -1.99, 11); glVertex3f(-9, -2.99, 10); /*mother board */ glColor3f(0.0, 0.7, 0.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-19.0, -17.5, -9.0); glVertex3f(-19.0, -17.0, -9.0); glVertex3f(19.0, -17.0, -9.0); glVertex3f(19.0, -17.5, -9.0); glNormal3f(0.0, 0.0, 1.0); glVertex3f(19.0, -17.5, 6.0); glVertex3f(19.0, -17.0, 6.0); glVertex3f(-19.0, -17.0, 6.0); glVertex3f(-19.0, -17.5, 6.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-19.0, -17.5, 6.0); glVertex3f(-19.0, -17.0, 6.0); glVertex3f(-19.0, -17.0, -9.0); glVertex3f(-19.0, -17.5, -9.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(19.0, -17.5, -9.0); glVertex3f(19.0, -17.0, -9.0); glVertex3f(19.0, -17.0, 6.0); glVertex3f(19.0, -17.5, 6.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(19.0, -17.0, 6.0); glVertex3f(19.0, -17.0, -9.0); glVertex3f(-19.0, -17.0, -9.0); glVertex3f(-19.0, -17.0, 6.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(19.0, -17.5, -9.0); glVertex3f(19.0, -17.5, 6.0); glVertex3f(-19.0, -17.5, 6.0); glVertex3f(-19.0, -17.5, -9.0); glEnd(); glColor3f(0.7, 0.7, 0.7); glutSolidSphere(7.0, 10.0, 8.0); glPopMatrix(); glutSwapBuffers(); glFlush(); } void keyboard(unsigned char key, int x, int y) { static int toggle2 = 1; static int toggle3 = 1; switch(key) { case 27: exit(0); break; case 'w': glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); break; case 's': glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); break; case '+': ambient[0] = ambient[0] + 0.1; ambient[1] = ambient[1] + 0.1; ambient[2] = ambient[2] + 0.1; break; case '-': ambient[0] = ambient[0] - 0.1; ambient[1] = ambient[0] - 0.1; ambient[2] = ambient[0] - 0.1; break; case '2': if (toggle2 == 1) { glEnable(GL_LIGHT1); toggle2 = 0; } else if (toggle2 == 0) { glDisable(GL_LIGHT1); toggle2 = 1; } break; case '3': if (toggle3 == 1) { glEnable(GL_LIGHT2); toggle3 = 0; } else if (toggle3 == 0) { glDisable(GL_LIGHT2); toggle3 = 1; } break; } } void arrows(int key, int x, int y) { switch(key) { case GLUT_KEY_UP: u = u + 10; break; case GLUT_KEY_DOWN: u = u - 10; break; case GLUT_KEY_LEFT: v = v - 10.0; break; case GLUT_KEY_RIGHT: v = v + 10.0; break; } } void main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(200,100); glutInitWindowSize(500,500); glutCreateWindow("CSE 540 Lab #4"); glEnable(GL_DEPTH_TEST); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutSpecialFunc(arrows); glutIdleFunc(display); glutMainLoop(); }