Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.42 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 "Dependencies\glm\glm\gtc\matrix_transform.hpp"
  7. #include "Dependencies\glm\glm\gtc\type_ptr.hpp"
  8. #include "shader_stuff.h"
  9.  
  10. #include "teapot.h"
  11.  
  12. // ---------------------------------------
  13. // Identyfikatory obiektow
  14.  
  15. GLuint program;
  16. GLuint vBuffer_coord;
  17. GLuint vBuffer_color;
  18. GLuint vBuffer_indices;
  19. GLuint vArray;
  20.  
  21. // ---------------------------------------
  22. // Macierze przeksztalcen i rzutowania
  23.  
  24. glm::mat4x4 Matrix_proj;    // projection matrix
  25. glm::mat4x4 Matrix_mv;      // modelview matrix
  26. glm::mat4x4 Matrix_proj_mv; // projection*modelview matrix
  27.  
  28. // ---------------------------------------
  29. void DisplayScene()
  30. {
  31.     // Czyszczenie ramki
  32.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  33.  
  34.     // -----------------------------------
  35.     // 1. Geometria sceny
  36.     Matrix_mv = glm::mat4x4(1.0);
  37.     Matrix_mv = glm::translate(Matrix_mv, glm::vec3(_scene_translate_x, 0.0f, -5.0f));
  38.     Matrix_mv = glm::rotate(Matrix_mv, _scene_rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
  39.     Matrix_mv = glm::rotate(Matrix_mv, _scene_rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
  40.  
  41.  
  42.  
  43.     // Obliczanie macierzy rzutowania i przekazanie do shaderow
  44.     Matrix_proj_mv = Matrix_proj * Matrix_mv;
  45.     glUniformMatrix4fv(glGetUniformLocation(program, "Matrix_proj_mv"), 1, GL_FALSE, glm::value_ptr(Matrix_proj_mv));
  46.  
  47.     // -----------------------------------
  48.     // 2. Generowanie obiektow na ekranie
  49.     //glDrawElements(GL_TRIANGLES, TEAPOT_INDICES_COUNT, GL_UNSIGNED_INT, NULL);
  50.     glDrawElements(GL_TRIANGLES, 3 * TEAPOT_VERTEX_COUNT, GL_UNSIGNED_INT, NULL);
  51.     //glDrawArrays(GL_TRIANGLES, 0, TEAPOT_VERTEX_COUNT);
  52.  
  53.     glutSwapBuffers();
  54. }
  55.  
  56.  
  57. // ---------------------------------------
  58. void Reshape(int width, int height)
  59. {
  60.     glViewport(0, 0, width, height);
  61.     //Matrix_proj = glm::frustum( -1.0f, 1.0f, (-1.0f*height)/width, 1.0f*height/width, 1.0f, 4.f );
  62.     Matrix_proj = glm::perspectiveFov(glm::radians(60.0f), (float)width, (float)height, 0.1f, 100.f);
  63. }
  64.  
  65. // ---------------------------------------------------
  66. void Initialize()
  67. {
  68.  
  69.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  70.  
  71.     // 1. Programowanie potoku
  72.     program = glCreateProgram();
  73.     glAttachShader(program, LoadShader(GL_VERTEX_SHADER, "vertex.glsl"));
  74.     glAttachShader(program, LoadShader(GL_FRAGMENT_SHADER, "fragment.glsl"));
  75.     LinkAndValidateProgram(program);
  76.  
  77.  
  78.     // 2. Vertex arrays
  79.     glGenVertexArrays(1, &vArray);
  80.     glBindVertexArray(vArray);
  81.  
  82.     // Wspolrzedne wierzchokow
  83.     glGenBuffers(1, &vBuffer_coord);
  84.     glBindBuffer(GL_ARRAY_BUFFER, vBuffer_coord);
  85.     glBufferData(GL_ARRAY_BUFFER, sizeof(teapotPosition), teapotPosition, GL_STATIC_DRAW);
  86.  
  87.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  88.     glEnableVertexAttribArray(0);
  89.  
  90.     //// Kolor wierzcholkow
  91.     //glGenBuffers(1, &vBuffer_color);
  92.     //glBindBuffer(GL_ARRAY_BUFFER, vBuffer_color);
  93.     //glBufferData(GL_ARRAY_BUFFER, sizeof(cube_color), cube_color, GL_STATIC_DRAW);
  94.  
  95.     //glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  96.     //glEnableVertexAttribArray(1);
  97.  
  98.     // BUFOR: Indeksy wierzcholkow
  99.  
  100.     glGenBuffers(1, &vBuffer_indices);
  101.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vBuffer_indices);
  102.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(teapotIndices), teapotIndices, GL_STATIC_DRAW);
  103.  
  104.  
  105.     glBindVertexArray(0);
  106.     glEnable(GL_DEPTH_TEST);
  107.  
  108.  
  109.     // Wlaczenie VA i programu
  110.     glBindVertexArray(vArray);
  111.     glUseProgram(program);
  112.  
  113. }
  114.  
  115. // ---------------------------------------------------
  116. int main(int argc, char* argv[])
  117. {
  118.     // GLUT
  119.     glutInit(&argc, argv);
  120.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  121.     glutInitContextVersion(3, 2);
  122.     glutInitContextProfile(GLUT_CORE_PROFILE);
  123.     glutInitWindowSize(500, 500);
  124.     glutCreateWindow("Cube");
  125.  
  126.     // GLEW
  127.     glewExperimental = GL_TRUE;
  128.     GLenum err = glewInit();
  129.     if (GLEW_OK != err)
  130.     {
  131.         printf("GLEW Error\n");
  132.         exit(1);
  133.     }
  134.  
  135.     // OpenGL
  136.     if (!GLEW_VERSION_3_2)
  137.     {
  138.         printf("Brak OpenGL 3.2!\n");
  139.         exit(1);
  140.     }
  141.  
  142.     Initialize();
  143.     glutDisplayFunc(DisplayScene);
  144.     glutReshapeFunc(Reshape);
  145.     glutMouseFunc(MouseButton);
  146.     glutMotionFunc(MouseMotion);
  147.     glutMouseWheelFunc(MouseWheel);
  148.     glutKeyboardFunc(Keyboard);
  149.     glutSpecialFunc(SpecialKeys);
  150.  
  151.     glutMainLoop();
  152.  
  153.     // Cleaning();
  154.     glDeleteProgram(program);
  155.     glDeleteBuffers(1, &vBuffer_coord);
  156.     glDeleteBuffers(1, &vBuffer_color);
  157.     glDeleteVertexArrays(1, &vArray);
  158.  
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement