Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * GLUT Shapes Demo
- *
- * Written by Nigel Stewart November 2003
- *
- * This program is test harness for the sphere, cone
- * and torus shapes in GLUT.
- *
- * Spinning wireframe and smooth shaded shapes are
- * displayed until the ESC or q key is pressed. The
- * number of geometry stacks and slices can be adjusted
- * using the + and - keys.
- */
- #include <windows.h>
- #ifdef __APPLE__
- #include <GLUT/glut.h>
- #else
- #include <GL/glut.h>
- #endif
- #include <stdlib.h>
- float rotation_degree=0;
- float rotation_degree2=0;
- float rotation_degree3=0;
- float z = 1;
- float t1=1;
- float t2=-4;
- float t3=-12;
- float s1=.25;
- float s2=.25;
- float s3=.25;
- static int slices = 16;
- static int stacks = 16;
- /* GLUT callback Handlers */
- static void resize(int width, int height)
- {
- const float ar = (float) width / (float) height;
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity() ;
- }
- void drawQuadLeg(double r,double g,double b)
- {
- glBegin(GL_QUADS);
- glColor3d(r,g,b);
- glVertex3f(12,0,0);
- glVertex3f(12,.3,0);
- glVertex3f(12,.3,2);
- glVertex3f(12,0,2);
- glColor3d(r,g,b);
- glVertex3f(12,0,2);
- glVertex3f(12,.3,2);
- glVertex3f(6,.3,2);
- glVertex3f(6,0,2);
- glColor3d(r,g,b);
- glVertex3f(6,.3,0);
- glVertex3f(6,0,0);
- glVertex3f(6,0,2);
- glVertex3f(6,.3,2);
- glColor3d(r,g,b);
- glVertex3f(6,.3,0);
- glVertex3f(12,.3,0);
- glVertex3f(12,0,0);
- glVertex3f(6,0,0);
- glColor3d(r,g,b);
- glVertex3f(12,.3,0);
- glVertex3f(6,.3,0);
- glVertex3f(6,.3,2);
- glVertex3f(12,.3,2);
- glColor3d(r,g,b);
- glVertex3f(6,0,0);
- glVertex3f(12,0,0);
- glVertex3f(12,0,2);
- glVertex3f(6,0,2);
- glEnd();
- }
- void drawQuadUpLeg(double r,double g,double b)
- {
- glBegin(GL_QUADS);
- glColor3d(r,b,g);
- glVertex3f(11,.3,.9);
- glVertex3f(11,2,.9);
- glVertex3f(11,2,1.1);
- glVertex3f(11,.3,1.1);
- glColor3d(r,b,g);
- glVertex3f(7,2,.9);
- glVertex3f(7,.3,.9);
- glVertex3f(7,.3,1.1);
- glVertex3f(7,2,1.1);
- glColor3d(r,b,g);
- glVertex3f(7,.3,1.1);
- glVertex3f(11,.3,1.1);
- glVertex3f(11,2,1.1);
- glVertex3f(7,2,1.1);
- glColor3d(r,b,g);
- glVertex3f(7,.3,.9);
- glVertex3f(7,2,.9);
- glVertex3f(11,2,.9);
- glVertex3f(11,.3,.9);
- glEnd();
- }
- void drawFan(double r,double g,double b)
- {
- glBegin(GL_QUADS);
- //fan1
- glColor3d(b,g,r);
- glVertex3f(14,12,2);
- glVertex3f(8,12,2);
- glVertex3f(8,12,4);
- glVertex3f(14,12,4);
- //glColor3d(b,g,r);
- glVertex3f(14,11.6,2);
- glVertex3f(14,11.6,4);
- glVertex3f(8,11.6,4);
- glVertex3f(8,11.6,2);
- //glColor3d(b,g,r);
- glVertex3f(14,11.6,4);
- glVertex3f(14,12,4);
- glVertex3f(8,12,4);
- glVertex3f(8,11.6,4);
- //glColor3d(b,g,r);
- glVertex3f(14,11.6,2);
- glVertex3f(8,11.6,2);
- glVertex3f(8,12,2);
- glVertex3f(14,12,2);
- //glColor3d(b,g,r);
- glVertex3f(8,12,2);
- glVertex3f(7,12,2.5);
- glVertex3f(7,12,3.5);
- glVertex3f(8,12,4);
- //glColor3d(b,g,r);
- glVertex3f(8,11.6,2);
- glVertex3f(8,11.6,4);
- glVertex3f(7,11.6,3.5);
- glVertex3f(7,11.6,2.5);
- //glColor3d(b,g,r);
- glVertex3f(8,11.6,4);
- glVertex3f(8,12,4);
- glVertex3f(7,12,3.5);
- glVertex3f(7,11.6,3.5);
- //glColor3d(b,g,r);
- glVertex3f(8,11.6,2);
- glVertex3f(7,11.6,2.5);
- glVertex3f(7,12,2.5);
- glVertex3f(8,12,2);
- //glColor3d(b,g,r);
- glVertex3f(7,11.6,2.5);
- glVertex3f(7,11.6,3.5);
- glVertex3f(7,12,3.5);
- glVertex3f(7,12,2.5);
- //glColor3d(b,g,r);
- glVertex3f(14,12,2);
- glVertex3f(14,12,4);
- glVertex3f(15,12,3.5);
- glVertex3f(15,12,2.5);
- //glColor3d(b,g,r);
- glVertex3f(14,11.6,2);
- glVertex3f(15,11.6,2.5);
- glVertex3f(15,11.6,3.5);
- glVertex3f(14,11.6,4);
- //glColor3d(b,g,r);
- glVertex3f(15,11.6,3.5);
- glVertex3f(15,12,3.5);
- glVertex3f(14,12,4);
- glVertex3f(14,11.6,4);
- //glColor3d(b,g,r);
- glVertex3f(14,11.6,2);
- glVertex3f(14,12,2);
- glVertex3f(15,12,2.5);
- glVertex3f(15,11.6,2.5);
- //glColor3d(b,g,r);
- glVertex3f(15,11.6,2.5);
- glVertex3f(15,12,2.5);
- glVertex3f(15,12,3.5);
- glVertex3f(15,11.6,3.5);
- //fan2
- glColor3d(b,g,r);
- glVertex3f(12,12.4,0);
- glVertex3f(10,12.4,0);
- glVertex3f(10,12.4,6);
- glVertex3f(12,12.4,6);
- glColor3d(b,g,r);
- glVertex3f(12,12,6);
- glVertex3f(10,12,6);
- glVertex3f(10,12,0);
- glVertex3f(12,12,0);
- glColor3d(b,g,r);
- glVertex3f(10,12.4,0);
- glVertex3f(10,12,0);
- glVertex3f(10,12,6);
- glVertex3f(10,12.4,6);
- glColor3d(b,g,r);
- glVertex3f(12,12,0);
- glVertex3f(12,12.4,0);
- glVertex3f(12,12.4,6);
- glVertex3f(12,12,6);
- glColor3d(b,g,r);
- glVertex3f(12,12.4,0);
- glVertex3f(11.5,12.4,-1);
- glVertex3f(10.5,12.4,-1);
- glVertex3f(10,12.4,0);
- glColor3d(b,g,r);
- glVertex3f(12,12,0);
- glVertex3f(10,12,0);
- glVertex3f(10.5,12,-1);
- glVertex3f(11.5,12,-1);
- glColor3d(b,g,r);
- glVertex3f(12,12,0);
- glVertex3f(11.5,12,-1);
- glVertex3f(11.5,12.4,-1);
- glVertex3f(12,12.4,0);
- glColor3d(b,g,r);
- glVertex3f(10,12.4,0);
- glVertex3f(10.5,12.4,-1);
- glVertex3f(10.5,12,-1);
- glVertex3f(10,12,0);
- glColor3d(b,g,r);
- glVertex3f(10.5,12.4,-1);
- glVertex3f(11.5,12.4,-1);
- glVertex3f(11.5,12,-1);
- glVertex3f(10.5,12,-1);
- glColor3d(b,g,r);
- glVertex3f(10,12.4,6);
- glVertex3f(10.5,12.4,7);
- glVertex3f(11.5,12.4,7);
- glVertex3f(12,12.4,6);
- glColor3d(b,g,r);
- glVertex3f(10,12,6);
- glVertex3f(12,12,6);
- glVertex3f(11.5,12,7);
- glVertex3f(10.5,12,7);
- //glColor3d(b,g,r);
- glVertex3f(10.5,12,7);
- glVertex3f(11.5,12,7);
- glVertex3f(11.5,12.4,7);
- glVertex3f(10.5,12.4,7);
- glColor3d(b,g,r);
- glVertex3f(12,12,6);
- glVertex3f(12,12.4,6);
- glVertex3f(11.5,12.4,7);
- glVertex3f(11.5,12,7);
- glColor3d(b,g,r);
- glVertex3f(10,12,6);
- glVertex3f(10.5,12,7);
- glVertex3f(10.5,12.4,7);
- glVertex3f(10,12.4,6);
- glEnd();
- }
- void drawQuadBodyBack(double r,double g,double b)
- {
- glBegin(GL_QUADS);
- glColor3d(r,1,b);
- glVertex3f(9,2,0);
- glVertex3f(9,9,0);
- glVertex3f(12,10,0);
- glVertex3f(12,2,0);
- glColor3d(0,0,0);
- glVertex3f(12,2,0);
- glVertex3f(12,10,0);
- glVertex3f(9,9,0);
- glVertex3f(9,2,0);
- glColor3d(r,1,b);
- glVertex3f(12,2,6);
- glVertex3f(12,10,6);
- glVertex3f(9,9,6);
- glVertex3f(9,2,6);
- glColor3d(0,0,0);
- glVertex3f(9,2,6);
- glVertex3f(9,9,6);
- glVertex3f(12,10,6);
- glVertex3f(12,2,6);
- glColor3d(r,1,b);
- glVertex3f(12,2,0);
- glVertex3f(12,10,0);
- glVertex3f(12,10,6);
- glVertex3f(12,2,6);
- glColor3d(0,0,0);
- glVertex3f(12,2,6);
- glVertex3f(12,10,6);
- glVertex3f(12,10,0);
- glVertex3f(12,2,0);
- glColor3d(r,1,b);
- glVertex3f(12,10,0);
- glVertex3f(9,9,0);
- glVertex3f(9,9,6);
- glVertex3f(12,10,6);
- glColor3d(0,0,0);
- glVertex3f(12,10,6);
- glVertex3f(9,9,6);
- glVertex3f(9,9,0);
- glVertex3f(12,10,0);
- glColor3d(r,1,b);
- glVertex3f(9,2,0);
- glVertex3f(4,2,0);
- glVertex3f(4,5,0);
- glVertex3f(9,9,0);
- glColor3d(0,0,0);
- glVertex3f(9,9,0);
- glVertex3f(4,5,0);
- glVertex3f(4,2,0);
- glVertex3f(9,2,0);
- glColor3d(r,1,b);
- glVertex3f(9,9,6);
- glVertex3f(4,5,6);
- glVertex3f(4,2,6);
- glVertex3f(9,2,6);
- glColor3d(0,0,0);
- glVertex3f(9,2,6);
- glVertex3f(4,2,6);
- glVertex3f(4,5,6);
- glVertex3f(9,9,6);
- glColor3d(r,1,b);
- glVertex3f(7,7.4,0);
- glVertex3f(4,5,0);
- glVertex3f(4,5,6);
- glVertex3f(7,7.4,6);
- glColor3d(0,0,0);
- glVertex3f(7,7.4,6);
- glVertex3f(4,5,6);
- glVertex3f(4,5,0);
- glVertex3f(7,7.4,0);
- glColor3d(r,1,b);
- glVertex3f(4,2,0);
- glVertex3f(4,2,6);
- glVertex3f(4,5,6);
- glVertex3f(4,5,0);
- glColor3d(0,0,0);
- glVertex3f(4,5,0);
- glVertex3f(4,5,6);
- glVertex3f(4,2,6);
- glVertex3f(4,2,0);
- glColor3d(r,1,b);
- glVertex3f(12,2,0);
- glVertex3f(12,2,6);
- glVertex3f(4,2,6);
- glVertex3f(4,2,0);
- glColor3d(0,0,0);
- glVertex3f(4,2,0);
- glVertex3f(4,2,6);
- glVertex3f(12,2,6);
- glVertex3f(12,2,0);
- glColor3d(1,0,0);
- //glColor3d(b,g,r);
- glVertex3f(12,5,2);
- glVertex3f(12,7,2);
- glVertex3f(18,7,2);
- glVertex3f(18,5,2);
- //glColor3d(b,g,r);
- glVertex3f(18,5,4);
- glVertex3f(18,7,4);
- glVertex3f(12,7,4);
- glVertex3f(12,5,4);
- //glColor3d(b,g,r);
- glVertex3f(12,7,2);
- glVertex3f(12,7,4);
- glVertex3f(18,7,4);
- glVertex3f(18,7,2);
- //glColor3d(b,g,r);
- glVertex3f(18,5,2);
- glVertex3f(18,5,4);
- glVertex3f(12,5,4);
- glVertex3f(12,5,2);
- glColor3d(b,g,r);
- glVertex3f(18,5,2);
- glVertex3f(18,7,2);
- glVertex3f(18,7,4);
- glVertex3f(18,5,4);
- //tail
- glColor3d(b,g,r);
- glVertex3f(18,5,2.7);
- glVertex3f(18,7,2.7);
- glVertex3f(21,10,2.7);
- glVertex3f(22,9,2.7);
- //glColor3d(b,g,r);
- glVertex3f(22,9,3.3);
- glVertex3f(21,10,3.3);
- glVertex3f(18,7,3.3);
- glVertex3f(18,5,3.3);
- //glColor3d(b,g,r);
- glVertex3f(18,7,2.7);
- glVertex3f(18,7,3.3);
- glVertex3f(21,10,3.3);
- glVertex3f(21,10,2.7);
- //glColor3d(b,g,r);
- glVertex3f(18,5,2.7);
- glVertex3f(22,9,2.7);
- glVertex3f(22,9,3.3);
- glVertex3f(18,5,3.3);
- //tailend
- glVertex3f(21,10,2.7);
- glVertex3f(21.4,10.2,2.7);
- glVertex3f(22,10,2.7);
- glVertex3f(22,9,2.7);
- glVertex3f(22,9,3.3);
- glVertex3f(22,10,3.3);
- glVertex3f(21.4,10.2,3.3);
- glVertex3f(21,10,3.3);
- glVertex3f(22,9,3.3);
- glVertex3f(22,9,2.7);
- glVertex3f(22,10,2.7);
- glVertex3f(22,10,3.3);
- glVertex3f(21.4,10.2,2.7);
- glVertex3f(21.4,10.2,3.3);
- glVertex3f(22,10,3.3);
- glVertex3f(22,10,2.7);
- glVertex3f(21,10,2.7);
- glVertex3f(21,10,3.3);
- glVertex3f(21.4,10.2,3.3);
- glVertex3f(21.4,10.2,2.7);
- glColor3f(1,0,0);
- glVertex3f(12,5,4);
- glVertex3f(12,4,4);
- glVertex3f(14,4.99,4);
- glVertex3f(14,5,4);
- glVertex3f(12,5,2);
- glVertex3f(14,5,2);
- glVertex3f(14,4.99,2);
- glVertex3f(12,4,2);
- glVertex3f(12,4,2);
- glVertex3f(14,4.99,2);
- glVertex3f(14,4.99,4);
- glVertex3f(12,4,4);
- glEnd();
- }
- void cylinder() // only call once on startup
- {
- GLUquadricObj *quadratic;
- quadratic = gluNewQuadric();
- glTranslated(11,1,9);
- glRotatef(0.0, 0.0, 1.0, 0.0);
- glColor3d(1,0,0);
- gluCylinder(quadratic,.3,.3,3.0f,32,32);
- }
- static void display(void)
- {
- const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
- const double a = t*90.0;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glPushMatrix();
- glTranslated(t1,t2,t3);
- glRotated(rotation_degree,0,1,0);
- glRotated(rotation_degree2,1,0,0);
- glRotated(rotation_degree3,0,0,1);
- glScaled(z, z, z);
- glScalef(s1,s2,s3);
- drawQuadLeg(1,0,0);
- glTranslated(0,0,-4);
- drawQuadLeg(1,0,0);
- drawQuadBodyBack(0,0,1);
- drawFan(0,0,1);
- drawQuadUpLeg(0,0,1);
- glTranslated(0,0,4);
- drawQuadUpLeg(0,0,1);
- glRotated(-90,1,0,0);
- cylinder();
- glPopMatrix();
- glutSwapBuffers();
- }
- static void key(unsigned char key, int x, int y)
- {
- switch (key)
- {
- case 27 :
- case 'q':
- exit(0);
- break;
- case 'd':
- rotation_degree += 2.5;
- break;
- case 'c':
- rotation_degree -= 2.5;
- break;
- case 'f':
- rotation_degree2 += 2.5;
- break;
- case 'v':
- rotation_degree2 -= 2.5;
- break;
- case 'g':
- rotation_degree3 += 2.5;
- break;
- case 'b':
- rotation_degree3 -= 2.5;
- break;
- case 'o':
- t1 ++;
- break;
- case 'p':
- t1--;
- break;
- case 'h':
- t2 ++;
- break;
- case 'j':
- t2--;
- break;
- case 'k':
- t3 ++;
- break;
- case 'l':
- t3--;
- break;
- case '1':
- s1+=.05;
- break;
- case '2':
- s1-=.05;
- break;
- case '3':
- s2+=.05;
- break;
- case '4':
- s2-=.05;
- break;
- case '5':
- s3+=.05;
- break;
- case '6':
- s3-=.05;
- break;
- case 'z':
- if(z >= 1.5) break;
- z += .2;
- break;
- case 'x':
- if(z <= .5) break;
- z -= .2;
- break;
- }
- glutPostRedisplay();
- }
- static void idle(void)
- {
- glutPostRedisplay();
- }
- int main(int argc, char *argv[])
- {
- glutInit(&argc, argv);
- glutInitWindowSize(640,480);
- glutInitWindowPosition(10,10);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("GLUT Shapes");
- glutReshapeFunc(resize);
- glutDisplayFunc(display);
- glutKeyboardFunc(key);
- glutIdleFunc(idle);
- glClearColor(1,1,1,1);
- glEnable(GL_CULL_FACE);
- glCullFace(GL_BACK);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glutMainLoop();
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement