Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.76 KB | None | 0 0
  1. #include "Dependencies\glew\glew.h"
  2. #include "Dependencies\freeglut\freeglut.h"
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include "Dependencies\glm\glm\ext.hpp"
  6. #include "shader_stuff.h"
  7.  
  8. #define VERTEX_SHADER_PATH "vertex.glsl"
  9. #define FRAGMENT_SHADER_PATH "fragment.glsl"
  10. #define SCREEN_FPS 60
  11. #define HOUSE_TRIANGLE_N 7
  12.  
  13.  
  14. // ---------------------------------------
  15. // Identyfikatory obiektow
  16.  
  17. GLuint program;
  18. GLuint vBuffer_coord;
  19. GLuint vBuffer_color;
  20. GLuint vBuffer_indices;
  21. GLuint vArray;
  22.  
  23.  
  24.  
  25. GLfloat triangles_cord_compressed[8 * 3] =
  26. {
  27.     // front face points
  28.  
  29.     // p0
  30.     -0.5, -0.5, 0.5,
  31.     // p1
  32.     0.5, -0.5, 0.5,
  33.     // p2
  34.     0.5, 0.5, 0.5,
  35.     // p3
  36.     -0.5, 0.5, 0.5,
  37.  
  38.     // back face
  39.  
  40.     // p4
  41.     -0.5, -0.5, -0.5,
  42.     // p5
  43.     0.5, -0.5, -0.5,
  44.     // p6
  45.     0.5, 0.5, -0.5,
  46.     // p7
  47.     -0.5, 0.5, -0.5,
  48.  
  49. };
  50. GLfloat triangles_color_compressed[3 * 2 * 6] =
  51. {
  52.     1.f, 0.f, 0.f,
  53.     1.f, 0.f, 0.f,
  54.  
  55.     0.f, 1.f, 0.f,
  56.     0.f, 1.f, 0.f,
  57.  
  58.     0.f, 0.f, 1.f,
  59.     0.f, 0.f, 1.f,
  60.  
  61.     1.f, 1.f, 0.f,
  62.     1.f, 1.f, 0.f,
  63.  
  64.     0.f, 1.f, 1.f,
  65.     0.f, 1.f, 1.f,
  66.  
  67.     1.f, 0.f, 1.f,
  68.     1.f, 0.f, 1.f
  69. };
  70.  
  71. GLuint triangles_indices_compressed[3 * 2 * 6] =
  72. {
  73.     // front face
  74.     0,1,3,
  75.     1,2,3,
  76.  
  77.     // right face
  78.     1,5,2,
  79.     5,6,2,
  80.  
  81.     // left face
  82.     4,0,7,
  83.     0,3,7,
  84.  
  85.     // bottom face
  86.     0,1,4,
  87.     1,5,4,
  88.  
  89.     // top face
  90.     3,2,7,
  91.     2,6,7,
  92.  
  93.     // back face
  94.     4,5,7,
  95.     5,6,7
  96.  
  97. };
  98.  
  99. // ---------------------------------------
  100. // Macierze przeksztalcen i rzutowania
  101.  
  102. glm::mat4x4 Matrix_proj;    // projection matrix
  103. glm::mat4x4 Matrix_mv;      // modelview matrix
  104. glm::mat4x4 Matrix_proj_mv; // projection*modelview matrix
  105.  
  106. // Zmienna kontrolujaca obrot szescianu
  107. GLfloat obrot = 0.0;
  108. // ---------------------------------------
  109. void DisplayScene()
  110. {
  111.  
  112.     // Czyszczenie ramki
  113.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  114.  
  115.     // ------------------------------
  116.     // 1. Geometria sceny
  117.     // Ustawiamy macierz jednostkowa
  118.     Matrix_mv = glm::mat4x4(1.0);
  119.  
  120.     // Przesuwamy srodek ukladu o 2 jednostki za ekran (oddalamy)
  121.     Matrix_mv = glm::translate(Matrix_mv, glm::vec3(0.0f, 0.0f, -2.0));
  122.  
  123.     // Obracamy srodek ukladu
  124.     Matrix_mv = glm::rotate(Matrix_mv, obrot, glm::vec3(0.0f, 1.0f, 0.0f));
  125.  
  126.     // ------------------------------
  127.     // 2. Obliczenie macierzy rzutowania
  128.     // (wlasciwie mnozenie mogloby sie odbyc w vs, ale...?)
  129.  
  130.     Matrix_proj_mv = Matrix_proj * Matrix_mv;
  131.  
  132.     // ------------------------------
  133.     // 3. Przekazanie macierzy do vertex shadera
  134.     glUniformMatrix4fv(glGetUniformLocation(program, "Matrix_proj_mv"), 1, GL_FALSE, glm::value_ptr(Matrix_proj_mv));
  135.  
  136.     // ------------------------------
  137.     // 4. Generowanie obiektow na ekranie
  138.     glDrawArrays(GL_TRIANGLES, 0, 3*2*6);
  139.  
  140.     // ------------------------------
  141.     // ZADANIE 1: Wygeneruj kolejny szescian obok/na gorze itp.
  142.     // ZADANIE 2: Spraw aby obracal sie w druga strone bez dodawania zadnej nowej zmiennej
  143.  
  144.     glutSwapBuffers();
  145. }
  146.  
  147.  
  148. // ---------------------------------------
  149. void Reshape(int width, int height)
  150. {
  151.     glViewport(0, 0, width, height);
  152.     //Matrix_proj = glm::frustum( -1.0f, 1.0f, (-1.0f*height)/width, 1.0f*height/width, 1.0f, 4.f );
  153.     Matrix_proj = glm::perspective(glm::radians(90.0f), (float)width / (float)height, 0.1f, 100.f);
  154. }
  155.  
  156.  
  157. // ---------------------------------------
  158. void Initialize()
  159. {
  160.  
  161.     glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
  162.  
  163.  
  164.     // 1. Program i shadery
  165.     program = glCreateProgram();
  166.  
  167.     glAttachShader(program, LoadShader(GL_VERTEX_SHADER, "vertex.glsl"));
  168.     glAttachShader(program, LoadShader(GL_FRAGMENT_SHADER, "fragment.glsl"));
  169.  
  170.     LinkAndValidateProgram(program);
  171.  
  172.  
  173.  
  174.     // 2. Vertex arrays
  175.  
  176. #define POSITION 0
  177. #define COLOR 1
  178.  
  179.     glGenVertexArrays(1, &vArray);
  180.     glBindVertexArray(vArray);
  181.  
  182.     // BUFOR: Wspolrzedne wierzcholkow
  183.  
  184.     glGenBuffers(1, &vBuffer_coord);
  185.     glBindBuffer(GL_ARRAY_BUFFER, vBuffer_coord);
  186.     glBufferData(GL_ARRAY_BUFFER, sizeof(triangles_cord_compressed), triangles_cord_compressed, GL_STATIC_DRAW);
  187.  
  188.     glVertexAttribPointer(POSITION, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  189.     glEnableVertexAttribArray(POSITION);
  190.  
  191.     // BUFOR: Kolor wierzcholkow
  192.  
  193.     glGenBuffers(1, &vBuffer_color);
  194.     glBindBuffer(GL_ARRAY_BUFFER, vBuffer_color);
  195.     glBufferData(GL_ARRAY_BUFFER, sizeof(triangles_color_compressed), triangles_color_compressed, GL_STATIC_DRAW);
  196.  
  197.     glVertexAttribPointer(COLOR, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  198.     glEnableVertexAttribArray(COLOR);
  199.  
  200.     // BUFOR: Indeksy wierzcholkow
  201.  
  202.     glGenBuffers(1, &vBuffer_indices);
  203.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vBuffer_indices);
  204.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(triangles_indices_compressed), triangles_indices_compressed, GL_STATIC_DRAW);
  205.  
  206.  
  207.     glBindVertexArray(0);
  208.     glEnable(GL_DEPTH_TEST);
  209.  
  210.  
  211.     // Wlaczenie VA i programu
  212.     glBindVertexArray(vArray);
  213.     glUseProgram(program);
  214. }
  215.  
  216.  
  217. // ---------------------------------------------------
  218. void Animation(int frame)
  219. {
  220.     // Obracanie szescianu
  221.     obrot += 0.01f;
  222.     if (obrot > 2 * 3.14f) obrot = 0.f;
  223.  
  224.     glutPostRedisplay();
  225.     glutTimerFunc(10, Animation, 0);
  226. }
  227.  
  228. // ---------------------------------------------------
  229. int main(int argc, char* argv[])
  230. {
  231.     // GLUT
  232.     glutInit(&argc, argv);
  233.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  234.     glutInitContextVersion(3, 2);
  235.     glutInitContextProfile(GLUT_CORE_PROFILE);
  236.     glutInitWindowSize(500, 500);
  237.     glutCreateWindow("Tablice wierzcholkow");
  238.     glutDisplayFunc(DisplayScene);
  239.     glutReshapeFunc(Reshape);
  240.     glutTimerFunc(100, Animation, 0);
  241.  
  242.  
  243.     // GLEW
  244.     glewExperimental = GL_TRUE;
  245.     GLenum err = glewInit();
  246.     if (GLEW_OK != err)
  247.     {
  248.         printf("GLEW Error\n");
  249.         exit(1);
  250.     }
  251.  
  252.     // OpenGL
  253.     if (!GLEW_VERSION_3_2)
  254.     {
  255.         printf("Brak OpenGL 3.2!\n");
  256.         exit(1);
  257.     }
  258.  
  259.  
  260.     Initialize();
  261.  
  262.  
  263.     glutMainLoop();
  264.  
  265.     // Cleaning
  266.     glDeleteProgram(program);
  267.     glDeleteBuffers(1, &vBuffer_coord);
  268.     glDeleteBuffers(1, &vBuffer_color);
  269.     glDeleteVertexArrays(1, &vArray);
  270.  
  271.     return 0;
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement