Advertisement
pabblo097

OpenGL_ZAD2

Mar 23rd, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.21 KB | None | 0 0
  1. #include <GL/glut.h>
  2. #include <stdlib.h>
  3.  
  4. enum
  5. {
  6.     FULL_WINDOW,
  7.     ASPECT_1_1,
  8.     PERSP,
  9.     ORTO,
  10.     FRUST,
  11.     EXIT
  12. };
  13.  
  14.  
  15. GLdouble fovy = 90;
  16. int Aspect = FULL_WINDOW;
  17. int rzut = PERSP;
  18.  
  19. int obrot_x = 0;
  20. int obrot_y = 0;
  21. GLfloat xx, yx, zx = 0.0f;
  22. GLfloat xy, yy, zy = 0.0f;
  23.  
  24.  
  25.  
  26. void Display()
  27. {
  28.     glClearColor(1.0, 1.0, 1.0, 1.0);
  29.     glClear(GL_COLOR_BUFFER_BIT);
  30.     glMatrixMode(GL_MODELVIEW);
  31.     glLoadIdentity();
  32.     gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);
  33.     glRotatef(obrot_x, xx, yx, zx);
  34.     glRotatef(obrot_y, xy, yy, zy);
  35.     glTranslatef(0.0f, 0.0f, 0.0f);
  36.     glColor3f(0.0, 0.0, 0.0);
  37.     glBegin(GL_LINES);
  38.         glVertex3f(1.0, 1.0, 1.0);
  39.         glVertex3f(1.0, -1.0, 1.0);
  40.  
  41.         glVertex3f(1.0, -1.0, 1.0);
  42.         glVertex3f(1.0, -1.0, -1.0);
  43.  
  44.         glVertex3f(1.0, -1.0, -1.0);
  45.         glVertex3f(1.0, 1.0, -1.0);
  46.  
  47.         glVertex3f(1.0, 1.0, -1.0);
  48.         glVertex3f(1.0, 1.0, 1.0);
  49.  
  50.         glVertex3f(-1.0, 1.0, 1.0);
  51.         glVertex3f(-1.0, -1.0, 1.0);
  52.  
  53.         glVertex3f(-1.0, -1.0, 1.0);
  54.         glVertex3f(-1.0, -1.0, -1.0);
  55.  
  56.         glVertex3f(-1.0, -1.0, -1.0);
  57.         glVertex3f(-1.0, 1.0, -1.0);
  58.  
  59.         glVertex3f(-1.0, 1.0, -1.0);
  60.         glVertex3f(-1.0, 1.0, 1.0);
  61.  
  62.         glVertex3f(1.0, 1.0, 1.0);
  63.         glVertex3f(-1.0, 1.0, 1.0);
  64.  
  65.         glVertex3f(1.0, -1.0, 1.0);
  66.         glVertex3f(-1.0, -1.0, 1.0);
  67.  
  68.         glVertex3f(1.0, -1.0, -1.0);
  69.         glVertex3f(-1.0, -1.0, -1.0);
  70.  
  71.         glVertex3f(1.0, 1.0, -1.0);
  72.         glVertex3f(-1.0, 1.0, -1.0);
  73.     glEnd();
  74.     glFlush();
  75.     glutSwapBuffers();
  76. }
  77.  
  78.  
  79. void Reshape(int width, int height)
  80. {
  81.     glViewport(0, 0, width, height);
  82.     glMatrixMode(GL_PROJECTION);
  83.     glLoadIdentity();
  84.  
  85.     GLdouble aspect = 1;
  86.     GLfloat zakres = 3.0f;
  87.     GLfloat blisko = 1.0f;
  88.     GLfloat daleko = 5.0f;
  89.  
  90.     if (rzut == ORTO)
  91.     {
  92.         if (Aspect == ASPECT_1_1)
  93.         {
  94.             if (width < height && width > 0)
  95.                 glOrtho(-zakres, zakres, -zakres * height / width, zakres * height / width, -zakres, zakres);
  96.             else
  97.                 if (width >= height && height > 0)
  98.                     glOrtho(-zakres * width / height, zakres * width / height, -zakres, zakres, -zakres, zakres);
  99.         }
  100.         else
  101.             glOrtho(-zakres, zakres, -zakres, zakres, -zakres, zakres);
  102.     }
  103.  
  104.     if (rzut == FRUST)
  105.     {
  106.         if (Aspect == ASPECT_1_1)
  107.         {
  108.             if (width < height && width > 0)
  109.                 glFrustum(-zakres, zakres, -zakres * height / width, zakres * height / width, blisko, daleko);
  110.             else
  111.                 if (width >= height && height > 0)
  112.                     glFrustum(-zakres * width / height, zakres * width / height, -zakres, zakres, blisko, daleko);
  113.         }
  114.         else
  115.             glFrustum(-zakres, zakres, -zakres, zakres, blisko, daleko);
  116.     }
  117.  
  118.     if (rzut == PERSP)
  119.     {
  120.         if (height > 0)
  121.             aspect = width / (GLdouble)height;
  122.  
  123.         gluPerspective(fovy, aspect, blisko, daleko);
  124.     }
  125.  
  126.     Display();
  127. }
  128.  
  129.  
  130. void Keyboard(unsigned char key, int x, int y)
  131. {
  132.     if (key == 'a')
  133.     {
  134.         xx = 0;
  135.         yx = 1;
  136.         zx = 0;
  137.         obrot_x = obrot_x + 5;
  138.     }
  139.  
  140.     if (key == 'd')
  141.     {
  142.         xx = 0;
  143.         yx = 1;
  144.         zx = 0;
  145.         obrot_x = obrot_x - 5;
  146.     }
  147.  
  148.     if (key == 'w')
  149.     {
  150.         xy = 1;
  151.         yy = 0;
  152.         zy = 0;
  153.         obrot_y = obrot_y + 5;
  154.     }
  155.  
  156.     if (key == 's')
  157.     {
  158.         xy = 1;
  159.         yy = 0;
  160.         zy = 0;
  161.         obrot_y = obrot_y - 5;
  162.     }
  163.  
  164.     Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  165. }
  166.  
  167.  
  168.  
  169.  
  170. void Menu(int value)
  171. {
  172.     switch (value)
  173.     {
  174.     case FULL_WINDOW:
  175.         Aspect = FULL_WINDOW;
  176.         Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  177.         break;
  178.  
  179.     case ASPECT_1_1:
  180.         Aspect = ASPECT_1_1;
  181.         Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  182.         break;
  183.  
  184.     case PERSP:
  185.         rzut = PERSP;
  186.         Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  187.         break;
  188.  
  189.     case FRUST:
  190.         rzut = FRUST;
  191.         Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  192.         break;
  193.  
  194.     case ORTO:
  195.         rzut = ORTO;
  196.         Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
  197.         break;
  198.  
  199.     case EXIT:
  200.         exit(0);
  201.     }
  202. }
  203.  
  204.  
  205. int main(int argc, char* argv[])
  206. {
  207.     glutInit(&argc, argv);
  208.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  209.     glutInitWindowSize(400, 400);
  210.     glutCreateWindow("Mรณj program");
  211.     glutDisplayFunc(Display);
  212.     glutReshapeFunc(Reshape);
  213.     glutKeyboardFunc(Keyboard);
  214.     glutCreateMenu(Menu);
  215.         glutAddMenuEntry("Aspekt obrazu - cale okno", FULL_WINDOW);
  216.         glutAddMenuEntry("Aspekt obrazu 1:1", ASPECT_1_1);
  217.         glutAddMenuEntry("Rzut ortogonalny", ORTO);
  218.         glutAddMenuEntry("Rzut frustrum", FRUST);
  219.         glutAddMenuEntry("Rzut perspektywiczny", PERSP);
  220.         glutAddMenuEntry("Wyjscie", EXIT);
  221.     glutAttachMenu(GLUT_RIGHT_BUTTON);
  222.     glutMainLoop();
  223.     return 0;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement