Advertisement
Guest User

kWADRYKI

a guest
Oct 25th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.86 KB | None | 0 0
  1. #include <windows.h>
  2. #include <GL/glu.h>
  3. #include <GL/glut.h>
  4.  
  5. // sta³e do obs³ugi menu podrêcznego
  6.  
  7. enum
  8. {
  9.     /* obiekty              */
  10.     SPHERE,               // kula
  11.     CYLINDER,             // cylinder
  12.     DISK,                 // dysk
  13.     PARTIAL_DISK,         // czêœciowy dysk
  14.  
  15.  
  16.     /* wektory normalne */
  17.     NONE,
  18.     FLAT,
  19.     SMOOTH,
  20.  
  21.     /* orientacja       */
  22.     OUTSIDE,
  23.     INSIDE,
  24.  
  25.     /* styl             */
  26.     FILL,
  27.     LINE,
  28.     SILHOUETTE,
  29.     OPOINT,
  30.  
  31.     EXIT                  // wyjście
  32. };
  33.  
  34.  
  35. // rozmiary bryły obcinania
  36.  
  37. const GLdouble left = -1.0;
  38. const GLdouble right = 1.0;
  39. const GLdouble bottom = -1.0;
  40. const GLdouble top = 1.0;
  41. const GLdouble near2 = 3.0;
  42. const GLdouble far2 = 7.0;
  43.  
  44. // kąt obrotu obiektu wzglêdem osi X i Y
  45. GLfloat rotatexy = 0;
  46.  
  47. /* inicjalizacja zmiennych */
  48. int wybor;
  49. int slices = 10;
  50. int segments = 10;
  51. int style, kek;
  52. int normalne;
  53. int orientacja;
  54. GLUquadricObj *obiekt;
  55.  
  56. // funkcja generuj¹ca scenê
  57. void display ()
  58. {
  59.     // kolor t³a - zawartoœæ bufora koloru
  60.     glClearColor (1.0,1.0,1.0,1.0);
  61.  
  62.     // czyszczenie bufora koloru i bufora g³êbokoœci
  63.     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  64.  
  65.     // wybór macierzy modelowania
  66.     glMatrixMode (GL_MODELVIEW);
  67.  
  68.     // macierz modelowania = macierz jednostkowa
  69.     glLoadIdentity ();
  70.  
  71.     // w³¹czenie testu bufora g³êbokoœci
  72.     glEnable (GL_DEPTH_TEST);
  73.  
  74.      // w³¹czenie oœwietlenia
  75.     glEnable (GL_LIGHTING);
  76.  
  77.     // w³¹czenie œwiat³a GL_LIGHT0 z parametrami domyœlnymi
  78.     glEnable (GL_LIGHT0);
  79.  
  80.     // przesuniêcie uk³adu wspó³rzêdnych obiektu do œrodka bry³y odcinania
  81.     glTranslatef (0,0,-(near2+far2)/2);
  82.  
  83.     //obrót obiektu wzglêdem osi X i Y
  84.     glRotatef(rotatexy, 1, 1, 0);
  85.  
  86.     // kolor rysowanego obiektu
  87.     glColor3f(1.0,0.0,0.0);
  88.     /* utworzenie kwadryki */
  89.  
  90. obiekt = gluNewQuadric();
  91.  
  92.     /*ustawienie właściwoœci kwadryki*/
  93. gluQuadricDrawStyle(obiekt, style);
  94. gluQuadricNormals(obiekt, normalne);
  95. gluQuadricOrientation(obiekt,orientacja);
  96.  
  97.     /*narysowanie wybranego obiektu*/
  98. switch(wybor)
  99. {
  100. case SPHERE:
  101.     gluSphere(obiekt, 0.5, slices, segments);
  102.     break;
  103. case DISK:
  104.     gluDisk(obiekt, 0.3, 0.5, slices, segments);
  105.     break;
  106. case CYLINDER:
  107.     gluCylinder(obiekt, 0.2, 0.3, 1, slices, segments);
  108.     break;
  109. case PARTIAL_DISK:
  110.     gluPartialDisk(obiekt, 0.3, 0.5, slices, segments, 1, 200);
  111.     break;
  112. }
  113.  
  114.  
  115.     /* usuniêcie kwadryki */
  116.     gluDeleteQuadric;
  117.  
  118.     // skierowanie poleceñ do wykonania
  119.     glFlush ();
  120.  
  121.     // zamiana buforów koloru
  122.     glutSwapBuffers();
  123.  
  124.     glutPostRedisplay();
  125. }
  126.  
  127. // zmiana wielkoœci okna
  128.  
  129.  
  130. void reshape (int width, int height)
  131. {
  132.     // obszar renderingu - ca³e okno
  133.     glViewport (0,0,width,height);
  134.  
  135.     // wybór macierzy rzutowania
  136.     glMatrixMode (GL_PROJECTION);
  137.  
  138.     // macierz rzutowania = macierz jednostkowa
  139.     glLoadIdentity ();
  140.  
  141.     // parametry bry³y obcinania
  142.     glFrustum (left,right,bottom,top,near2,far2);
  143.  
  144.     // generowanie sceny 3D
  145.     display ();
  146. }
  147.  
  148. // obs³uga klawiatury
  149.  
  150. void keyboard (unsigned char key, int x, int y)
  151. {
  152.     if (key == '+')
  153.         {
  154.         slices++;
  155.         }
  156.     else if (key == '-')
  157.         {
  158.         slices--;
  159.         }
  160.  
  161.     // narysowanie sceny
  162.    reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  163. }
  164.  
  165.  
  166.  
  167. // obs³uga klawiszy funkcyjnych i klawiszy kursora
  168. void specialKeys (int key, int x, int y)
  169. {
  170.     switch (key)
  171.     {
  172.         // PageUp
  173.         case GLUT_KEY_PAGE_UP:
  174.          {
  175.          segments ++;
  176.          }
  177.         break;
  178.  
  179.         // PageDown
  180.         case GLUT_KEY_PAGE_DOWN:
  181.          {
  182.          segments--;
  183.          }
  184.         break;
  185.     }
  186.  
  187.     // odrysowanie okna
  188.    reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  189. }
  190.  
  191. // obs³uga menu podrêcznego
  192.  
  193. void menu (int value)
  194. {
  195.     switch (value)
  196.     {
  197.         // rysowany obiekt - kula
  198.         case SPHERE:
  199.         wybor = SPHERE;
  200.         display ();
  201.         break;
  202.  
  203.         // rysowany obiekt - cylinder
  204.         case CYLINDER:
  205.         wybor = CYLINDER;
  206.         display ();
  207.         break;
  208.  
  209.         // rysowany obiekt - dysk
  210.         case DISK:
  211.         wybor = DISK;
  212.         display ();
  213.         break;
  214.  
  215.         // rysowany obiekt - czêœciowy dysk
  216.         case PARTIAL_DISK:
  217.         wybor = PARTIAL_DISK;
  218.         display ();
  219.         break;
  220.  
  221.  
  222.         /*  ustawienie pozosta³ych pozycji w MENU   */
  223.  
  224.         case NONE:
  225.         normalne = GLU_NONE;
  226.         display();
  227.         break;
  228.  
  229.         case FLAT:
  230.         normalne = GLU_FLAT;
  231.         display();
  232.         break;
  233.  
  234.         case SMOOTH:
  235.         normalne = GLU_SMOOTH;
  236.         display();
  237.         break;
  238.  
  239.         case FILL:
  240.         style = GLU_FILL;
  241.         display();
  242.         break;
  243.  
  244.         case LINE:
  245.         style = GLU_LINE;
  246.         display();
  247.         break;
  248.  
  249.         case SILHOUETTE:
  250.         style = GLU_SILHOUETTE;
  251.         display();
  252.         break;
  253.  
  254.         case OPOINT:
  255.         style = GLU_POINT;
  256.         display();
  257.         break;
  258.  
  259.         case INSIDE:
  260.         orientacja = GLU_INSIDE;
  261.         display();
  262.         break;
  263.  
  264.         case OUTSIDE:
  265.         orientacja = GLU_OUTSIDE;
  266.         display();
  267.         break;
  268.  
  269.         // wyjœcie
  270.         case EXIT:
  271.         exit (0);
  272.     }
  273.     reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  274.  
  275. }
  276.  //funkcja wywo³ywana podczas bezczynnoœci programu
  277. void idle()
  278. {
  279.     // zmiana k¹ta obrotu wzglêdem osi X i Y
  280.     rotatexy+= .05;
  281. }
  282. int main (int argc, char *argv[])
  283. {
  284.     // inicjalizacja biblioteki GLUT
  285.     glutInit (&argc,argv);
  286.  
  287.     // inicjalizacja bufora ramki
  288.     glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  289.  
  290.     // rozmiary g³ównego okna programu
  291.     glutInitWindowSize (500,500);
  292.  
  293.     // utworzenie g³ównego okna programu
  294.  
  295.     glutCreateWindow ("Kwadryki");
  296.  
  297.     // do³¹czenie funkcji generuj¹cej scenê 3D
  298.     glutDisplayFunc (display);
  299.  
  300.     // do³¹czenie funkcji wywo³ywanej przy zmianie rozmiaru okna
  301.     glutReshapeFunc (reshape);
  302.  
  303.     // do³¹czenie funkcji obs³ugi klawiatury
  304.     glutKeyboardFunc (keyboard);
  305.  
  306.     // do³¹czenie funkcji obs³ugi klawiszy funkcyjnych i klawiszy kursora
  307.     glutSpecialFunc (specialKeys);
  308.  
  309.     //funkcja wywo³ywana podczas bezczynnoœci programu
  310.     glutIdleFunc(idle);
  311.  
  312.     // utworzenie menu podrêcznego
  313.     glutCreateMenu (menu);
  314.  
  315.     // utworzenie podmenu - obiekt
  316.     int menuObject = glutCreateMenu (menu);
  317.     glutAddMenuEntry ("Kula",SPHERE);
  318.     glutAddMenuEntry ("Cylinder",CYLINDER);
  319.     glutAddMenuEntry ("Dysk",DISK);
  320.     glutAddMenuEntry ("Czesciowy dysk",PARTIAL_DISK);
  321.  
  322.     int menuNormal = glutCreateMenu (menu);
  323.     /* utworzenie podmenu - Wektory normalne */
  324.     glutAddMenuEntry ("NONE",NONE);
  325.     glutAddMenuEntry ("FLAT",FLAT);
  326.     glutAddMenuEntry ("SMOOTH",SMOOTH);
  327.  
  328.     int menuOrient = glutCreateMenu (menu);
  329.     /* utworzenie podmenu - Orientacja      */
  330.     glutAddMenuEntry ("OUTSIDE",OUTSIDE);
  331.     glutAddMenuEntry ("INSIDE",INSIDE);
  332.  
  333.     int menuStyle = glutCreateMenu (menu);
  334.     /* utworzenie podmenu - Styl            */
  335.     glutAddMenuEntry ("FILL",FILL);
  336.     glutAddMenuEntry ("LINE",LINE);
  337.     glutAddMenuEntry ("SILHOUETTE",SILHOUETTE);
  338.     glutAddMenuEntry ("POINT",OPOINT);
  339.     // menu g³ówne
  340.     glutCreateMenu (menu);
  341.     glutAddSubMenu ("Obiekt",menuObject);
  342.     glutAddSubMenu ("Normalne",menuNormal);
  343.     glutAddSubMenu ("Orientacja",menuOrient);
  344.     glutAddSubMenu ("Style",menuStyle);
  345.     /*    dodanie pozosta³ych podmenu      */
  346.     glutAddMenuEntry ("Wyjście",EXIT);
  347.  
  348.     // okreœlenie przycisku myszki obs³uguj¹cej menu podrêczne
  349.     glutAttachMenu (GLUT_RIGHT_BUTTON);
  350.  
  351.     // wprowadzenie programu do obs³ugi pêtli komunikatów
  352.     glutMainLoop ();
  353.     return 0;
  354. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement