Advertisement
Guest User

Heli

a guest
Sep 18th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.22 KB | None | 0 0
  1. /*
  2.  * GLUT Shapes Demo
  3.  *
  4.  * Written by Nigel Stewart November 2003
  5.  *
  6.  * This program is test harness for the sphere, cone
  7.  * and torus shapes in GLUT.
  8.  *
  9.  * Spinning wireframe and smooth shaded shapes are
  10.  * displayed until the ESC or q key is pressed.  The
  11.  * number of geometry stacks and slices can be adjusted
  12.  * using the + and - keys.
  13.  */
  14. #include <windows.h>
  15. #ifdef __APPLE__
  16. #include <GLUT/glut.h>
  17. #else
  18. #include <GL/glut.h>
  19. #endif
  20.  
  21. #include <stdlib.h>
  22.  
  23. float rotation_degree=0;
  24. float rotation_degree2=0;
  25. float rotation_degree3=0;
  26. float z = 1;
  27. float t1=1;
  28. float t2=-4;
  29. float t3=-12;
  30. float s1=.25;
  31. float s2=.25;
  32. float s3=.25;
  33.  
  34. static int slices = 16;
  35. static int stacks = 16;
  36.  
  37. /* GLUT callback Handlers */
  38.  
  39. static void resize(int width, int height)
  40. {
  41.     const float ar = (float) width / (float) height;
  42.  
  43.     glViewport(0, 0, width, height);
  44.     glMatrixMode(GL_PROJECTION);
  45.     glLoadIdentity();
  46.     glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
  47.  
  48.     glMatrixMode(GL_MODELVIEW);
  49.     glLoadIdentity() ;
  50. }
  51.  
  52. void drawQuadLeg(double r,double g,double b)
  53. {
  54.     glBegin(GL_QUADS);
  55.         glColor3d(r,g,b);
  56.         glVertex3f(12,0,0);
  57.         glVertex3f(12,.3,0);
  58.         glVertex3f(12,.3,2);
  59.         glVertex3f(12,0,2);
  60.  
  61.         glColor3d(r,g,b);
  62.         glVertex3f(12,0,2);
  63.         glVertex3f(12,.3,2);
  64.         glVertex3f(6,.3,2);
  65.         glVertex3f(6,0,2);
  66.  
  67.         glColor3d(r,g,b);
  68.         glVertex3f(6,.3,0);
  69.         glVertex3f(6,0,0);
  70.         glVertex3f(6,0,2);
  71.         glVertex3f(6,.3,2);
  72.  
  73.         glColor3d(r,g,b);
  74.         glVertex3f(6,.3,0);
  75.         glVertex3f(12,.3,0);
  76.         glVertex3f(12,0,0);
  77.         glVertex3f(6,0,0);
  78.  
  79.         glColor3d(r,g,b);
  80.         glVertex3f(12,.3,0);
  81.         glVertex3f(6,.3,0);
  82.         glVertex3f(6,.3,2);
  83.         glVertex3f(12,.3,2);
  84.  
  85.         glColor3d(r,g,b);
  86.         glVertex3f(6,0,0);
  87.         glVertex3f(12,0,0);
  88.         glVertex3f(12,0,2);
  89.         glVertex3f(6,0,2);
  90.     glEnd();
  91. }
  92.  
  93. void drawQuadUpLeg(double r,double g,double b)
  94. {
  95.     glBegin(GL_QUADS);
  96.         glColor3d(r,b,g);
  97.         glVertex3f(11,.3,.9);
  98.         glVertex3f(11,2,.9);
  99.         glVertex3f(11,2,1.1);
  100.         glVertex3f(11,.3,1.1);
  101.  
  102.         glColor3d(r,b,g);
  103.         glVertex3f(7,2,.9);
  104.         glVertex3f(7,.3,.9);
  105.         glVertex3f(7,.3,1.1);
  106.         glVertex3f(7,2,1.1);
  107.  
  108.         glColor3d(r,b,g);
  109.         glVertex3f(7,.3,1.1);
  110.         glVertex3f(11,.3,1.1);
  111.         glVertex3f(11,2,1.1);
  112.         glVertex3f(7,2,1.1);
  113.  
  114.         glColor3d(r,b,g);
  115.         glVertex3f(7,.3,.9);
  116.         glVertex3f(7,2,.9);
  117.         glVertex3f(11,2,.9);
  118.         glVertex3f(11,.3,.9);
  119.     glEnd();
  120. }
  121.  
  122. void drawFan(double r,double g,double b)
  123. {
  124.     glBegin(GL_QUADS);
  125.         //fan1
  126.         glColor3d(b,g,r);
  127.         glVertex3f(14,12,2);
  128.         glVertex3f(8,12,2);
  129.         glVertex3f(8,12,4);
  130.         glVertex3f(14,12,4);
  131.  
  132.         //glColor3d(b,g,r);
  133.         glVertex3f(14,11.6,2);
  134.         glVertex3f(14,11.6,4);
  135.         glVertex3f(8,11.6,4);
  136.         glVertex3f(8,11.6,2);
  137.  
  138.         //glColor3d(b,g,r);
  139.         glVertex3f(14,11.6,4);
  140.         glVertex3f(14,12,4);
  141.         glVertex3f(8,12,4);
  142.         glVertex3f(8,11.6,4);
  143.  
  144.         //glColor3d(b,g,r);
  145.         glVertex3f(14,11.6,2);
  146.         glVertex3f(8,11.6,2);
  147.         glVertex3f(8,12,2);
  148.         glVertex3f(14,12,2);
  149.  
  150.         //glColor3d(b,g,r);
  151.         glVertex3f(8,12,2);
  152.         glVertex3f(7,12,2.5);
  153.         glVertex3f(7,12,3.5);
  154.         glVertex3f(8,12,4);
  155.         //glColor3d(b,g,r);
  156.         glVertex3f(8,11.6,2);
  157.         glVertex3f(8,11.6,4);
  158.         glVertex3f(7,11.6,3.5);
  159.         glVertex3f(7,11.6,2.5);
  160.         //glColor3d(b,g,r);
  161.         glVertex3f(8,11.6,4);
  162.         glVertex3f(8,12,4);
  163.         glVertex3f(7,12,3.5);
  164.         glVertex3f(7,11.6,3.5);
  165.         //glColor3d(b,g,r);
  166.         glVertex3f(8,11.6,2);
  167.         glVertex3f(7,11.6,2.5);
  168.         glVertex3f(7,12,2.5);
  169.         glVertex3f(8,12,2);
  170.         //glColor3d(b,g,r);
  171.         glVertex3f(7,11.6,2.5);
  172.         glVertex3f(7,11.6,3.5);
  173.         glVertex3f(7,12,3.5);
  174.         glVertex3f(7,12,2.5);
  175.  
  176.         //glColor3d(b,g,r);
  177.         glVertex3f(14,12,2);
  178.         glVertex3f(14,12,4);
  179.         glVertex3f(15,12,3.5);
  180.         glVertex3f(15,12,2.5);
  181.         //glColor3d(b,g,r);
  182.         glVertex3f(14,11.6,2);
  183.         glVertex3f(15,11.6,2.5);
  184.         glVertex3f(15,11.6,3.5);
  185.         glVertex3f(14,11.6,4);
  186.         //glColor3d(b,g,r);
  187.         glVertex3f(15,11.6,3.5);
  188.         glVertex3f(15,12,3.5);
  189.         glVertex3f(14,12,4);
  190.         glVertex3f(14,11.6,4);
  191.         //glColor3d(b,g,r);
  192.         glVertex3f(14,11.6,2);
  193.         glVertex3f(14,12,2);
  194.         glVertex3f(15,12,2.5);
  195.         glVertex3f(15,11.6,2.5);
  196.         //glColor3d(b,g,r);
  197.         glVertex3f(15,11.6,2.5);
  198.         glVertex3f(15,12,2.5);
  199.         glVertex3f(15,12,3.5);
  200.         glVertex3f(15,11.6,3.5);
  201.  
  202.         //fan2
  203.         glColor3d(b,g,r);
  204.         glVertex3f(12,12.4,0);
  205.         glVertex3f(10,12.4,0);
  206.         glVertex3f(10,12.4,6);
  207.         glVertex3f(12,12.4,6);
  208.  
  209.         glColor3d(b,g,r);
  210.         glVertex3f(12,12,6);
  211.         glVertex3f(10,12,6);
  212.         glVertex3f(10,12,0);
  213.         glVertex3f(12,12,0);
  214.  
  215.         glColor3d(b,g,r);
  216.         glVertex3f(10,12.4,0);
  217.         glVertex3f(10,12,0);
  218.         glVertex3f(10,12,6);
  219.         glVertex3f(10,12.4,6);
  220.  
  221.         glColor3d(b,g,r);
  222.         glVertex3f(12,12,0);
  223.         glVertex3f(12,12.4,0);
  224.         glVertex3f(12,12.4,6);
  225.         glVertex3f(12,12,6);
  226.  
  227.         glColor3d(b,g,r);
  228.         glVertex3f(12,12.4,0);
  229.         glVertex3f(11.5,12.4,-1);
  230.         glVertex3f(10.5,12.4,-1);
  231.         glVertex3f(10,12.4,0);
  232.         glColor3d(b,g,r);
  233.         glVertex3f(12,12,0);
  234.         glVertex3f(10,12,0);
  235.         glVertex3f(10.5,12,-1);
  236.         glVertex3f(11.5,12,-1);
  237.         glColor3d(b,g,r);
  238.         glVertex3f(12,12,0);
  239.         glVertex3f(11.5,12,-1);
  240.         glVertex3f(11.5,12.4,-1);
  241.         glVertex3f(12,12.4,0);
  242.         glColor3d(b,g,r);
  243.         glVertex3f(10,12.4,0);
  244.         glVertex3f(10.5,12.4,-1);
  245.         glVertex3f(10.5,12,-1);
  246.         glVertex3f(10,12,0);
  247.         glColor3d(b,g,r);
  248.         glVertex3f(10.5,12.4,-1);
  249.         glVertex3f(11.5,12.4,-1);
  250.         glVertex3f(11.5,12,-1);
  251.         glVertex3f(10.5,12,-1);
  252.  
  253.         glColor3d(b,g,r);
  254.         glVertex3f(10,12.4,6);
  255.         glVertex3f(10.5,12.4,7);
  256.         glVertex3f(11.5,12.4,7);
  257.         glVertex3f(12,12.4,6);
  258.         glColor3d(b,g,r);
  259.         glVertex3f(10,12,6);
  260.         glVertex3f(12,12,6);
  261.         glVertex3f(11.5,12,7);
  262.         glVertex3f(10.5,12,7);
  263.         //glColor3d(b,g,r);
  264.         glVertex3f(10.5,12,7);
  265.         glVertex3f(11.5,12,7);
  266.         glVertex3f(11.5,12.4,7);
  267.         glVertex3f(10.5,12.4,7);
  268.         glColor3d(b,g,r);
  269.         glVertex3f(12,12,6);
  270.         glVertex3f(12,12.4,6);
  271.         glVertex3f(11.5,12.4,7);
  272.         glVertex3f(11.5,12,7);
  273.         glColor3d(b,g,r);
  274.         glVertex3f(10,12,6);
  275.         glVertex3f(10.5,12,7);
  276.         glVertex3f(10.5,12.4,7);
  277.         glVertex3f(10,12.4,6);
  278.  
  279.     glEnd();
  280. }
  281.  
  282.  
  283. void drawQuadBodyBack(double r,double g,double b)
  284. {
  285.     glBegin(GL_QUADS);
  286.         glColor3d(r,1,b);
  287.         glVertex3f(9,2,0);
  288.         glVertex3f(9,9,0);
  289.         glVertex3f(12,10,0);
  290.         glVertex3f(12,2,0);
  291.  
  292.         glColor3d(0,0,0);
  293.         glVertex3f(12,2,0);
  294.         glVertex3f(12,10,0);
  295.         glVertex3f(9,9,0);
  296.         glVertex3f(9,2,0);
  297.  
  298.  
  299.         glColor3d(r,1,b);
  300.         glVertex3f(12,2,6);
  301.         glVertex3f(12,10,6);
  302.         glVertex3f(9,9,6);
  303.         glVertex3f(9,2,6);
  304.  
  305.         glColor3d(0,0,0);
  306.         glVertex3f(9,2,6);
  307.         glVertex3f(9,9,6);
  308.         glVertex3f(12,10,6);
  309.         glVertex3f(12,2,6);
  310.  
  311.  
  312.         glColor3d(r,1,b);
  313.         glVertex3f(12,2,0);
  314.         glVertex3f(12,10,0);
  315.         glVertex3f(12,10,6);
  316.         glVertex3f(12,2,6);
  317.  
  318.         glColor3d(0,0,0);
  319.         glVertex3f(12,2,6);
  320.         glVertex3f(12,10,6);
  321.         glVertex3f(12,10,0);
  322.         glVertex3f(12,2,0);
  323.  
  324.         glColor3d(r,1,b);
  325.         glVertex3f(12,10,0);
  326.         glVertex3f(9,9,0);
  327.         glVertex3f(9,9,6);
  328.         glVertex3f(12,10,6);
  329.  
  330.         glColor3d(0,0,0);
  331.         glVertex3f(12,10,6);
  332.         glVertex3f(9,9,6);
  333.         glVertex3f(9,9,0);
  334.         glVertex3f(12,10,0);
  335.  
  336.         glColor3d(r,1,b);
  337.         glVertex3f(9,2,0);
  338.         glVertex3f(4,2,0);
  339.         glVertex3f(4,5,0);
  340.         glVertex3f(9,9,0);
  341.  
  342.         glColor3d(0,0,0);
  343.         glVertex3f(9,9,0);
  344.         glVertex3f(4,5,0);
  345.         glVertex3f(4,2,0);
  346.         glVertex3f(9,2,0);
  347.  
  348.  
  349.         glColor3d(r,1,b);
  350.         glVertex3f(9,9,6);
  351.         glVertex3f(4,5,6);
  352.         glVertex3f(4,2,6);
  353.         glVertex3f(9,2,6);
  354.  
  355.         glColor3d(0,0,0);
  356.         glVertex3f(9,2,6);
  357.         glVertex3f(4,2,6);
  358.         glVertex3f(4,5,6);
  359.         glVertex3f(9,9,6);
  360.  
  361.         glColor3d(r,1,b);
  362.         glVertex3f(7,7.4,0);
  363.         glVertex3f(4,5,0);
  364.         glVertex3f(4,5,6);
  365.         glVertex3f(7,7.4,6);
  366.  
  367.         glColor3d(0,0,0);
  368.         glVertex3f(7,7.4,6);
  369.         glVertex3f(4,5,6);
  370.         glVertex3f(4,5,0);
  371.         glVertex3f(7,7.4,0);
  372.  
  373.         glColor3d(r,1,b);
  374.         glVertex3f(4,2,0);
  375.         glVertex3f(4,2,6);
  376.         glVertex3f(4,5,6);
  377.         glVertex3f(4,5,0);
  378.  
  379.         glColor3d(0,0,0);
  380.         glVertex3f(4,5,0);
  381.         glVertex3f(4,5,6);
  382.         glVertex3f(4,2,6);
  383.         glVertex3f(4,2,0);
  384.  
  385.         glColor3d(r,1,b);
  386.         glVertex3f(12,2,0);
  387.         glVertex3f(12,2,6);
  388.         glVertex3f(4,2,6);
  389.         glVertex3f(4,2,0);
  390.  
  391.         glColor3d(0,0,0);
  392.         glVertex3f(4,2,0);
  393.         glVertex3f(4,2,6);
  394.         glVertex3f(12,2,6);
  395.         glVertex3f(12,2,0);
  396.  
  397.          glColor3d(1,0,0);
  398.         //glColor3d(b,g,r);
  399.         glVertex3f(12,5,2);
  400.         glVertex3f(12,7,2);
  401.         glVertex3f(18,7,2);
  402.         glVertex3f(18,5,2);
  403.  
  404.         //glColor3d(b,g,r);
  405.         glVertex3f(18,5,4);
  406.         glVertex3f(18,7,4);
  407.         glVertex3f(12,7,4);
  408.         glVertex3f(12,5,4);
  409.  
  410.         //glColor3d(b,g,r);
  411.         glVertex3f(12,7,2);
  412.         glVertex3f(12,7,4);
  413.         glVertex3f(18,7,4);
  414.         glVertex3f(18,7,2);
  415.  
  416.         //glColor3d(b,g,r);
  417.         glVertex3f(18,5,2);
  418.         glVertex3f(18,5,4);
  419.         glVertex3f(12,5,4);
  420.         glVertex3f(12,5,2);
  421.  
  422.  
  423.         glColor3d(b,g,r);
  424.         glVertex3f(18,5,2);
  425.         glVertex3f(18,7,2);
  426.         glVertex3f(18,7,4);
  427.         glVertex3f(18,5,4);
  428.  
  429.         //tail
  430.         glColor3d(b,g,r);
  431.         glVertex3f(18,5,2.7);
  432.         glVertex3f(18,7,2.7);
  433.         glVertex3f(21,10,2.7);
  434.         glVertex3f(22,9,2.7);
  435.         //glColor3d(b,g,r);
  436.         glVertex3f(22,9,3.3);
  437.         glVertex3f(21,10,3.3);
  438.         glVertex3f(18,7,3.3);
  439.         glVertex3f(18,5,3.3);
  440.         //glColor3d(b,g,r);
  441.         glVertex3f(18,7,2.7);
  442.         glVertex3f(18,7,3.3);
  443.         glVertex3f(21,10,3.3);
  444.         glVertex3f(21,10,2.7);
  445.         //glColor3d(b,g,r);
  446.         glVertex3f(18,5,2.7);
  447.         glVertex3f(22,9,2.7);
  448.         glVertex3f(22,9,3.3);
  449.         glVertex3f(18,5,3.3);
  450.  
  451.         //tailend
  452.         glVertex3f(21,10,2.7);
  453.         glVertex3f(21.4,10.2,2.7);
  454.         glVertex3f(22,10,2.7);
  455.         glVertex3f(22,9,2.7);
  456.  
  457.         glVertex3f(22,9,3.3);
  458.         glVertex3f(22,10,3.3);
  459.         glVertex3f(21.4,10.2,3.3);
  460.         glVertex3f(21,10,3.3);
  461.  
  462.         glVertex3f(22,9,3.3);
  463.         glVertex3f(22,9,2.7);
  464.         glVertex3f(22,10,2.7);
  465.         glVertex3f(22,10,3.3);
  466.  
  467.         glVertex3f(21.4,10.2,2.7);
  468.         glVertex3f(21.4,10.2,3.3);
  469.         glVertex3f(22,10,3.3);
  470.         glVertex3f(22,10,2.7);
  471.  
  472.         glVertex3f(21,10,2.7);
  473.         glVertex3f(21,10,3.3);
  474.         glVertex3f(21.4,10.2,3.3);
  475.         glVertex3f(21.4,10.2,2.7);
  476.  
  477.  
  478.         glColor3f(1,0,0);
  479.         glVertex3f(12,5,4);
  480.         glVertex3f(12,4,4);
  481.         glVertex3f(14,4.99,4);
  482.         glVertex3f(14,5,4);
  483.  
  484.         glVertex3f(12,5,2);
  485.         glVertex3f(14,5,2);
  486.         glVertex3f(14,4.99,2);
  487.         glVertex3f(12,4,2);
  488.  
  489.         glVertex3f(12,4,2);
  490.         glVertex3f(14,4.99,2);
  491.         glVertex3f(14,4.99,4);
  492.         glVertex3f(12,4,4);
  493.  
  494.     glEnd();
  495. }
  496.  
  497. void cylinder() // only call once on startup
  498. {
  499.     GLUquadricObj *quadratic;
  500.     quadratic = gluNewQuadric();
  501.     glTranslated(11,1,9);
  502.     glRotatef(0.0, 0.0, 1.0, 0.0);
  503.     glColor3d(1,0,0);
  504.     gluCylinder(quadratic,.3,.3,3.0f,32,32);
  505. }
  506.  
  507. static void display(void)
  508. {
  509.     const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
  510.     const double a = t*90.0;
  511.  
  512.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  513.  
  514.     glPushMatrix();
  515.         glTranslated(t1,t2,t3);
  516.         glRotated(rotation_degree,0,1,0);
  517.         glRotated(rotation_degree2,1,0,0);
  518.         glRotated(rotation_degree3,0,0,1);
  519.         glScaled(z, z, z);
  520.         glScalef(s1,s2,s3);
  521.  
  522.         drawQuadLeg(1,0,0);
  523.  
  524.         glTranslated(0,0,-4);
  525.         drawQuadLeg(1,0,0);
  526.  
  527.         drawQuadBodyBack(0,0,1);
  528.         drawFan(0,0,1);
  529.  
  530.         drawQuadUpLeg(0,0,1);
  531.         glTranslated(0,0,4);
  532.         drawQuadUpLeg(0,0,1);
  533.  
  534.         glRotated(-90,1,0,0);
  535.         cylinder();
  536.  
  537.     glPopMatrix();
  538.  
  539.     glutSwapBuffers();
  540. }
  541.  
  542.  
  543. static void key(unsigned char key, int x, int y)
  544. {
  545.     switch (key)
  546.     {
  547.         case 27 :
  548.         case 'q':
  549.             exit(0);
  550.             break;
  551.  
  552.         case 'd':
  553.             rotation_degree += 2.5;
  554.             break;
  555.         case 'c':
  556.             rotation_degree -= 2.5;
  557.             break;
  558.  
  559.         case 'f':
  560.             rotation_degree2 += 2.5;
  561.             break;
  562.         case 'v':
  563.             rotation_degree2 -= 2.5;
  564.             break;
  565.  
  566.         case 'g':
  567.             rotation_degree3 += 2.5;
  568.             break;
  569.         case 'b':
  570.             rotation_degree3 -= 2.5;
  571.             break;
  572.  
  573.         case 'o':
  574.             t1 ++;
  575.             break;
  576.         case 'p':
  577.             t1--;
  578.             break;
  579.  
  580.         case 'h':
  581.             t2 ++;
  582.             break;
  583.         case 'j':
  584.             t2--;
  585.             break;
  586.  
  587.         case 'k':
  588.             t3 ++;
  589.             break;
  590.         case 'l':
  591.             t3--;
  592.             break;
  593.  
  594.         case '1':
  595.             s1+=.05;
  596.             break;
  597.         case '2':
  598.             s1-=.05;
  599.             break;
  600.  
  601.         case '3':
  602.             s2+=.05;
  603.             break;
  604.         case '4':
  605.             s2-=.05;
  606.             break;
  607.  
  608.         case '5':
  609.             s3+=.05;
  610.             break;
  611.         case '6':
  612.             s3-=.05;
  613.             break;
  614.  
  615.         case 'z':
  616.             if(z >= 1.5) break;
  617.             z += .2;
  618.             break;
  619.         case 'x':
  620.             if(z <= .5) break;
  621.             z -= .2;
  622.             break;
  623.     }
  624.  
  625.     glutPostRedisplay();
  626. }
  627.  
  628. static void idle(void)
  629. {
  630.     glutPostRedisplay();
  631. }
  632.  
  633. int main(int argc, char *argv[])
  634. {
  635.     glutInit(&argc, argv);
  636.     glutInitWindowSize(640,480);
  637.     glutInitWindowPosition(10,10);
  638.     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  639.  
  640.     glutCreateWindow("GLUT Shapes");
  641.  
  642.     glutReshapeFunc(resize);
  643.     glutDisplayFunc(display);
  644.     glutKeyboardFunc(key);
  645.     glutIdleFunc(idle);
  646.  
  647.     glClearColor(1,1,1,1);
  648.     glEnable(GL_CULL_FACE);
  649.     glCullFace(GL_BACK);
  650.  
  651.     glEnable(GL_DEPTH_TEST);
  652.     glDepthFunc(GL_LESS);
  653.  
  654.     glutMainLoop();
  655.  
  656.     return EXIT_SUCCESS;
  657. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement