Advertisement
adwas33

Untitled

Mar 29th, 2022
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <GL/glew.h>
  3. #include <SFML/Window.hpp>
  4.  
  5. #include <glm/glm.hpp>
  6. #include <glm/gtc/matrix_transform.hpp>
  7. #include <glm/gtc/type_ptr.hpp>
  8.  
  9.  
  10. // Kody shaderów
  11. const GLchar* vertexSource = R"glsl(
  12. #version 150 core
  13. in vec3 position;
  14. in vec3 color;
  15. uniform mat4 model;
  16. uniform mat4 view;
  17. uniform mat4 proj;
  18. out vec3 Color;
  19. void main(){
  20.  
  21. Color = color;
  22.  
  23. gl_Position = proj * view * model * vec4(position, 1.0);
  24.  
  25. }
  26. )glsl";
  27.  
  28. const GLchar* fragmentSource = R"glsl(
  29. #version 150 core
  30. in vec3 Color;
  31. out vec4 outColor;
  32. void main()
  33. {
  34. outColor = vec4(Color, 1.0);
  35. }
  36. )glsl";
  37. //ZMIENNE OPISUJĄCE KAMERE
  38. glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
  39. glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
  40. glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);
  41. float obrot = 0;
  42.  
  43. //
  44.  
  45.  
  46.  
  47. int main()
  48. {
  49. sf::ContextSettings settings;
  50. settings.depthBits = 24;
  51. settings.stencilBits = 8;
  52.  
  53. // Okno renderingu
  54. sf::Window window(sf::VideoMode(800, 600, 32), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);
  55.  
  56. // Inicjalizacja GLEW
  57. glewExperimental = GL_TRUE;
  58. glewInit();
  59.  
  60. // Utworzenie VAO (Vertex Array Object)
  61. GLuint vao;
  62. glGenVertexArrays(1, &vao);
  63. glBindVertexArray(vao);
  64.  
  65. // Utworzenie VBO (Vertex Buffer Object)
  66. // i skopiowanie do niego danych wierzchołkowych
  67. GLuint vbo;
  68. glGenBuffers(1, &vbo);
  69.  
  70.  
  71.  
  72. /*
  73.  
  74. ///Zmiana 2) - odwrócony trójkąt
  75. GLfloat* vertices = new GLfloat[]{
  76. -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,// Top-left
  77. 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,// Top-right
  78. 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
  79.  
  80. 0.5f, -0.5f, 0.0f, 0.0f, 1.0f,// Bottom-right
  81. -0.5f, -0.5f, 1.0f, 1.0f, 1.0f,// Bottom-left
  82. -0.5f, 0.5f, 1.0f, 0.0f, 0.0f // Top-left
  83.  
  84. };
  85. */
  86. float vertices[] = {
  87. -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
  88. 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
  89. 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  90. 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  91. -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  92. -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
  93. -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  94. 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  95. 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f,
  96. 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f,
  97. -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
  98. -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  99. -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  100. -0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  101. -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  102. -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  103. -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  104. -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  105. 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  106. 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  107. 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  108. 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  109. 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  110. 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  111. -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  112. 0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  113. 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  114. 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  115. -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  116. -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  117. -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  118. 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f,
  119. 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  120. 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
  121. -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
  122. -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f
  123. };
  124.  
  125. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  126. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  127.  
  128. // Utworzenie i skompilowanie shadera wierzchołków
  129. GLuint vertexShader =
  130. glCreateShader(GL_VERTEX_SHADER);
  131. glShaderSource(vertexShader, 1, &vertexSource, NULL);
  132. glCompileShader(vertexShader);
  133.  
  134. // Utworzenie i skompilowanie shadera fragmentów
  135. GLuint fragmentShader =
  136. glCreateShader(GL_FRAGMENT_SHADER);
  137. glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
  138. glCompileShader(fragmentShader);
  139.  
  140. // Zlinkowanie obu shaderów w jeden wspólny program
  141. GLuint shaderProgram = glCreateProgram();
  142. glAttachShader(shaderProgram, vertexShader);
  143. glAttachShader(shaderProgram, fragmentShader);
  144. glBindFragDataLocation(shaderProgram, 0, "outColor");
  145. glLinkProgram(shaderProgram);
  146. glUseProgram(shaderProgram);
  147.  
  148. // Specifikacja formatu danych wierzchołkowych
  149. GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
  150. glEnableVertexAttribArray(posAttrib);
  151. glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), 0);
  152. GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
  153. glEnableVertexAttribArray(colAttrib);
  154.  
  155. //3)Zepsuje tutaj w tym miejscu ostatni parametr i program zamiast się wysypać zmieni kolor figury w środku
  156.  
  157. glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
  158.  
  159. // Rozpoczęcie pętli zdarzeń
  160. bool running = true;
  161. //ZMIANY
  162. int punkty_ = 6;
  163. long prymityw = GL_TRIANGLES;
  164. long double mouse_y = 0;
  165. //ZMIANY
  166.  
  167.  
  168. /// <summary>
  169. /// ///
  170. /// </summary>
  171. /// <returns></returns>
  172.  
  173.  
  174. glm::mat4 model = glm::mat4(1.0f);
  175.  
  176. model = glm::rotate(model, glm::radians(45.0f), glm::vec3(0.0f, 0.0f, 1.0f));
  177.  
  178. GLint uniTrans = glGetUniformLocation(shaderProgram, "model");
  179. glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(model));
  180.  
  181. glm::mat4 view;
  182. view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f),
  183. glm::vec3(0.0f, 0.0f, 0.0f),
  184. glm::vec3(0.0f, 1.0f, 0.0f));
  185.  
  186. GLint uniView = glGetUniformLocation(shaderProgram, "view");
  187. glUniformMatrix4fv(uniView, 1, GL_FALSE, glm::value_ptr(view));
  188. glm::mat4 proj = glm::perspective(glm::radians(45.0f), 800.0f / 800.0f, 0.06f, 100.0f);
  189. GLint uniProj = glGetUniformLocation(shaderProgram, "proj");
  190. glUniformMatrix4fv(uniProj, 1, GL_FALSE, glm::value_ptr(proj));
  191.  
  192. view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
  193. float cameraSpeed = 0.1f;
  194. float obrot = 0.3f;
  195. while (running) {
  196. sf::Event windowEvent;
  197. while (window.pollEvent(windowEvent)) {
  198. switch (windowEvent.type) {
  199. case sf::Event::Closed:
  200. running = false;
  201. break;
  202.  
  203. case sf::Event::KeyPressed:
  204. {
  205. switch (windowEvent.key.code)
  206. {
  207. case sf::Keyboard::Num1:
  208. prymityw = GL_POINTS;
  209. break;
  210. case sf::Keyboard::Num2:
  211. prymityw = GL_LINES;
  212. break;
  213. case sf::Keyboard::Num3:
  214. prymityw = GL_LINE_STRIP;
  215. break;
  216. case sf::Keyboard::Num4:
  217. prymityw = GL_LINE_LOOP;
  218. break;
  219. case sf::Keyboard::Num5:
  220. prymityw = GL_TRIANGLES;
  221. break;
  222. case sf::Keyboard::Num6:
  223. prymityw = GL_TRIANGLE_STRIP;
  224. break;
  225. case sf::Keyboard::Num7:
  226. prymityw = GL_TRIANGLE_FAN;
  227. break;
  228. case sf::Keyboard::Num8:
  229. prymityw = GL_QUADS;
  230. break;
  231. case sf::Keyboard::Num9:
  232. prymityw = GL_QUAD_STRIP;
  233. break;
  234. case sf::Keyboard::Num0:
  235. prymityw = GL_POLYGON;
  236. break;
  237.  
  238.  
  239. case sf::Keyboard::W:
  240. cameraPos -= cameraSpeed * cameraFront;
  241. break;
  242. case sf::Keyboard::Right:
  243.  
  244. obrot -= cameraSpeed;
  245. cameraFront.x = sin(obrot);
  246. cameraFront.z = -cos(obrot);
  247.  
  248.  
  249. break;
  250.  
  251. case sf::Keyboard::Left:
  252.  
  253. obrot -= cameraSpeed;
  254. cameraFront.x = -sin(obrot);
  255. cameraFront.z = cos(obrot);
  256. break;
  257.  
  258.  
  259.  
  260. }
  261.  
  262. }
  263. }
  264. // Nadanie scenie koloru czarnego
  265. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  266. glClear(GL_COLOR_BUFFER_BIT);
  267.  
  268. // Narysowanie trójkąta na podstawie 3 wierzchołków
  269. ///Zmiana 2.1 z 3 wierzchołków na 6 wierzchołków
  270. ///
  271. //glBindBuffer(GL_ARRAY_BUFFER, buffer);
  272.  
  273.  
  274. glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * punkty_ * 6, vertices,
  275. GL_STATIC_DRAW);
  276. glDrawArrays(prymityw, 0, punkty_);
  277. // Wymiana buforów tylni/przedni
  278. window.display();
  279. }
  280. }
  281. // Kasowanie programu i czyszczenie buforów
  282. glDeleteProgram(shaderProgram);
  283. glDeleteShader(fragmentShader);
  284. glDeleteShader(vertexShader);
  285. glDeleteBuffers(1, &vbo);
  286. glDeleteVertexArrays(1, &vao);
  287. // Zamknięcie okna renderingu
  288. window.close();
  289. return 0;
  290.  
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement