Xom9ik

Lab_8/15var (IV semester) CG

Apr 25th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.20 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include <iostream>
  4. #include "glut.h"
  5. static int w = 0, h = 0;
  6.  
  7. static float rtrX = 0.0f;
  8. static float rtrY = 0.0f;
  9. static float rtrZ = 0.0f;
  10.  
  11. void Init(void) {
  12.     glShadeModel(GL_SMOOTH);            // Разрешить плавное цветовое сглаживание
  13.     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);          // Очистка экрана в черный цвет
  14.     glClearDepth(1.0f);              // Разрешить очистку буфера глубины
  15.     glEnable(GL_DEPTH_TEST);            // Разрешить тест глубины
  16.     glDepthFunc(GL_LEQUAL);            // Тип теста глубины
  17.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);      // Улучшение в вычислении перспективы
  18. }
  19.  
  20. void DrawGLScene(void)
  21. {
  22.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
  23.     glLoadIdentity();                               // Сброс просмотра
  24.     glTranslatef(-7.0f, 0.0f, -9.0f);                 // Сдвиг влево и вглубь экрана
  25.     glRotatef(rtrY, 0.0f, 1.0f, 0.0f);                 // Вращение по оси Y
  26.     glRotatef(rtrX, 1.0f, 0.0f, 0.0f);                  //Вращение по оси X
  27.     glRotatef(rtrZ, 0.0f, 0.0f, 1.0f);                  //Вращение по оси Z
  28.     glBegin(GL_TRIANGLES);                          // Начало рисования TRIANGLES
  29.     glColor3ub(157, 158, 148);                      // Lemon Grass
  30.     glVertex3f(0.0f, -1.0f, 1.0f);                  // Низ треугольника (Передняя)
  31.     glVertex3f(-1.0f, 1.0f, 1.0f);                  // Левая точка
  32.     glVertex3f(1.0f, 1.0f, 1.0f);                  // Правая точка
  33.  
  34.     glColor3ub(211, 114, 145);                      // Charm
  35.     glVertex3f(0.0f, -1.0f, -2.0f);                  // Низ треугольника (Сзади)
  36.     glVertex3f(-1.0f, 1.0f, -2.0f);                 // Лево треугольника (Сзади)
  37.     glVertex3f(1.0f, 1.0f, -2.0f);                 // Право треугольника (Сзади)
  38.     glEnd();
  39.  
  40.     glBegin(GL_QUADS);                          // Начало рисования QUADS
  41.     glColor3ub(184, 216, 2);                      // Rio Grand
  42.     glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Левая)
  43.     glVertex3f(-1.0f, 1.0f, -2.0f); // Верх лево
  44.     glVertex3f(0.0f, -1.0f, -2.0f); // Низ лево
  45.     glVertex3f(0.0f, -1.0f, 1.0f); // Низ право
  46.  
  47.     glColor3ub(2, 184, 216);                      // Spain Sky
  48.     glVertex3f(1.0f, 1.0f, 1.0f); // Верх право квадрата (Право)
  49.     glVertex3f(1.0f, 1.0f, -2.0f); // Верх лево
  50.     glVertex3f(0.0f, -1.0f, -2.0f); // Низ лево
  51.     glVertex3f(0.0f, -1.0f, 1.0f); // Низ право
  52.  
  53.     glColor3ub(155, 40, 255);                      // Veronica
  54.     glVertex3f(1.0f, 1.0f, 1.0f); // Верх право квадрата (Правая крышка)
  55.     glVertex3f(1.0f, 1.0f, -2.0f); // Верх лево
  56.     glVertex3f(0.0f, 0.0f, -2.0f); // Низ лево
  57.     glVertex3f(0.0f, 0.0f, 1.0f); // Низ право
  58.  
  59.     glColor3ub(119, 40, 255);                      // Blue Violet
  60.     glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Левая крышка)
  61.     glVertex3f(-1.0f, 1.0f, -2.0f); // Верх лево
  62.     glVertex3f(0.0f, 0.0f, -2.0f); // Низ лево
  63.     glVertex3f(0.0f, 0.0f, 1.0f); // Низ право
  64.  
  65.     glEnd();
  66.     ///////////////////////////////////////////////////////
  67.     glLoadIdentity();
  68.     glTranslatef(0.0f, 0.0f, -9.0f);                 // Сдвиг влево и вглубь экрана
  69.     glRotatef(rtrY, 0.0f, 1.0f, 0.0f);                 // Вращение по оси Y
  70.     glRotatef(rtrX, 1.0f, 0.0f, 0.0f);                  //Вращение по оси X
  71.     glRotatef(rtrZ, 0.0f, 0.0f, 1.0f);                  //Вращение по оси Z
  72.  
  73.     glBegin(GL_QUADS); // Рисуем куб
  74.  
  75.     glColor3ub(237, 90, 71); // Carmine
  76.     glVertex3f(-2.0f, 1.0f, -1.0f); // Право верх квадрата (Верх)
  77.     glVertex3f(-2.0f, 1.0f, -3.0f); // Лево верх
  78.     glVertex3f(0.0f, 1.0f, -3.0f); // Лево низ
  79.     glVertex3f(0.0f, 1.0f, -1.0f); // Право низ
  80.  
  81.     glColor3ub(213, 238, 23); // Arctic Lime
  82.     glVertex3f(1.0f, -1.0f, 1.0f); // Верх право квадрата (Низ
  83.     glVertex3f(-1.0f, -1.0f, 1.0f); // Верх лево
  84.     glVertex3f(-1.0f, -1.0f, -1.0f); // Низ лево
  85.     glVertex3f(1.0f, -1.0f, -1.0f); // Низ право
  86.  
  87.     glColor3ub(236, 179, 43); // Fuel Yellow
  88.     glVertex3f(0.0f, 1.0f, -1.0f); // Верх право квадрата (Перед)
  89.     glVertex3f(-2.0f, 1.0f, -1.0f); // Верх лево
  90.     glVertex3f(-1.0f, -1.0f, 1.0f); // Низ лево
  91.     glVertex3f(1.0f, -1.0f, 1.0f); // Низ право
  92.  
  93.     glColor3ub(229, 153, 142); //Tonis
  94.     glVertex3f(1.0f, -1.0f, -1.0f); // Верх право квадрата (Зад)
  95.     glVertex3f(-1.0f, -1.0f, -1.0f); // Верх лево
  96.     glVertex3f(-2.0f, 1.0f, -3.0f); // Низ лево
  97.     glVertex3f(0.0f, 1.0f, -3.0f); // Низ право
  98.  
  99.     glColor3ub(100, 194, 160); // Tradewind
  100.     glVertex3f(-2.0f, 1.0f, -1.0f); // Верх право квадрата (Левая)
  101.     glVertex3f(-2.0f, 1.0f, -3.0f); // Верх лево
  102.     glVertex3f(-1.0f, -1.0f, -1.0f); // Низ лево
  103.     glVertex3f(-1.0f, -1.0f, 1.0f); // Низ право
  104.  
  105.     glColor3ub(128, 156, 61); // Sushi
  106.     glVertex3f(0.0f, 1.0f, -3.0f); // Верх право квадрата (Право)
  107.     glVertex3f(0.0f, 1.0f, -1.0f); // Верх лево
  108.     glVertex3f(1.0f, -1.0f, 1.0f); // Низ лево
  109.     glVertex3f(1.0f, -1.0f, -1.0f); // Низ право
  110.     glEnd();
  111.     ///////////////////////////////////////////////////////
  112.     glLoadIdentity();
  113.     glTranslatef(6.0f, 0.0f, -9.0f);                 // Сдвиг влево и вглубь экрана
  114.     glRotatef(rtrY, 0.0f, 1.0f, 0.0f);                 // Вращение по оси Y
  115.     glRotatef(rtrX, 1.0f, 0.0f, 0.0f);                  //Вращение по оси X
  116.     glRotatef(rtrZ, 0.0f, 0.0f, 1.0f);                  //Вращение по оси Z
  117.     glBegin(GL_TRIANGLES);                          // Начало рисования TRIANGLES
  118.  
  119.     glColor3ub(224, 154, 63);                      // Tigers Eye
  120.     glVertex3f(0.0f, 1.0f, 0.0f);                  // Верх треугольника (Передняя)
  121.     glVertex3f(-1.0f, -1.0f, 1.0f);                  // Левая точка (Передняя)
  122.     glVertex3f(1.0f, -1.0f, 1.0f);                  // Правая точка (Передняя)
  123.  
  124.     glColor3ub(148, 186, 196);                      // Niagara
  125.     glVertex3f(0.0f, 1.0f, 0.0f);                  // Верх треугольника (Правая)
  126.     glVertex3f(1.0f, -1.0f, 1.0f);                  // Лево треугольника (Правая)
  127.     glVertex3f(1.0f, -1.0f, -1.0f);                 // Право треугольника (Правая)
  128.  
  129.     glColor3ub(158, 166, 122);                      // Green Smoke
  130.     glVertex3f(0.0f, 1.0f, 0.0f);                  // Низ треугольника (Сзади)
  131.     glVertex3f(1.0f, -1.0f, -1.0f);                 // Лево треугольника (Сзади)
  132.     glVertex3f(-1.0f, -1.0f, -1.0f);                 // Право треугольника (Сзади)
  133.  
  134.     glColor3ub(215, 80, 63);                      // Flame Pea
  135.     glVertex3f(0.0f, 1.0f, 0.0f);                  // Верх треугольника (Левая)
  136.     glVertex3f(-1.0f, -1.0f, -1.0f);                  // Лево треугольника (Левая)
  137.     glVertex3f(-1.0f, -1.0f, 1.0f);                  // Право треугольника (Левая)
  138.     //нижняя часть
  139.     glColor3ub(148, 186, 196);                      // Niagara
  140.     glVertex3f(0.0f, -3.0f, 0.0f);                  // Верх треугольника (Передняя)
  141.     glVertex3f(-1.0f, -1.0f, 1.0f);                  // Левая точка (Передняя)
  142.     glVertex3f(1.0f, -1.0f, 1.0f);                  // Правая точка (Передняя)
  143.  
  144.     glColor3ub(224, 154, 63);                      // Tigers Eye
  145.     glVertex3f(0.0f, -3.0f, 0.0f);                  // Верх треугольника (Правая)
  146.     glVertex3f(1.0f, -1.0f, 1.0f);                  // Лево треугольника (Правая)
  147.     glVertex3f(1.0f, -1.0f, -1.0f);                 // Право треугольника (Правая)
  148.  
  149.     glColor3ub(215, 80, 63);                      // Flame Pea
  150.     glVertex3f(0.0f, -3.0f, 0.0f);                  // Низ треугольника (Сзади)
  151.     glVertex3f(1.0f, -1.0f, -1.0f);                 // Лево треугольника (Сзади)
  152.     glVertex3f(-1.0f, -1.0f, -1.0f);                 // Право треугольника (Сзади)
  153.  
  154.     glColor3ub(158, 166, 122);                      // Green Smoke
  155.     glVertex3f(0.0f, -3.0f, 0.0f);                  // Верх треугольника (Левая)
  156.     glVertex3f(-1.0f, -1.0f, -1.0f);                  // Лево треугольника (Левая)
  157.     glVertex3f(-1.0f, -1.0f, 1.0f);                  // Право треугольника (Левая)
  158.     glEnd();
  159.  
  160.     glFlush();
  161.     //  Меняем местами задний и передний буферы
  162.     glutSwapBuffers();
  163. }
  164.  
  165.  
  166. void Reshape(int width, int height) {
  167.     w = width;
  168.     h = height;
  169.     //  Дадим знать OpenGL в какую область будет производиться отрисов-
  170.     //  ка - в данном случае: всё окно
  171.     glViewport(0, 0, w, h);
  172.     //  Установим текущую матрицу - матрицу проективного преобразования
  173.     glMatrixMode(GL_PROJECTION);
  174.     //  Сделаем матрицу проективного преобразования единичной
  175.     glLoadIdentity();
  176.     //  Применим матрицу перспективного преобразования исходя из задан-
  177.     //  ного угла обзора, отношения ширины к высоте боковых и врехних/
  178.     //  нижних отсекающих плоскостей и расстояния ближней и дальней от-
  179.     //  секающих плоскостей
  180.     gluPerspective(70.0f, w / h, 0.1f, 100);
  181.     //  Установим текущей - матрицу видового преобразования, чтобы далее
  182.     //  В программе мы могли работать только с ней
  183.     glMatrixMode(GL_MODELVIEW);
  184.     glLoadIdentity();
  185.  
  186. }
  187.  
  188. void keyboard(unsigned char key, int x, int y)
  189. {
  190.     float speed = 10.0;
  191.     switch (key) {
  192.     case '1':
  193.         rtrY += speed;
  194.         glutPostRedisplay();
  195.         break;
  196.     case '2':
  197.         rtrY -= speed;
  198.         glutPostRedisplay();
  199.         break;
  200.     case '3':
  201.         rtrX += speed;
  202.         glutPostRedisplay();
  203.         break;
  204.     case '4':
  205.         rtrX -= speed;
  206.         glutPostRedisplay();
  207.         break;
  208.     case '5':
  209.         rtrZ += speed;
  210.         glutPostRedisplay();
  211.         break;
  212.     case '6':
  213.         rtrZ -= speed;
  214.         glutPostRedisplay();
  215.         break;
  216.     default:
  217.         break;
  218.     }
  219. }
  220.  
  221. int main(int argc, char *argv[]) {
  222.     glutInit(&argc, argv);
  223.     glutInitWindowSize(1200, 600);
  224.     glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
  225.     glutCreateWindow("Computer Graphics #8");
  226.     glutDisplayFunc(DrawGLScene);
  227.     glutReshapeFunc(Reshape);
  228.     glutKeyboardFunc(keyboard);
  229.     Init();
  230.     glutMainLoop();
  231.     return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment