Advertisement
adwas33

Untitled

Mar 11th, 2022
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <GL/glew.h>
  3. #include <SFML/Window.hpp>
  4.  
  5. // Kody shaderów
  6. const GLchar* vertexSource = R"glsl(
  7. #version 150 core
  8. in vec2 position;
  9. in vec3 color;
  10. out vec3 Color;
  11. void main(){
  12. Color = color;
  13. gl_Position = vec4(position, 0.0, 1.0);
  14. }
  15. )glsl";
  16.  
  17. const GLchar* fragmentSource = R"glsl(
  18. #version 150 core
  19. in vec3 Color;
  20. out vec4 outColor;
  21. void main()
  22. {
  23. outColor = vec4(Color, 1.0);
  24. }
  25. )glsl";
  26. int main()
  27. {
  28. sf::ContextSettings settings;
  29. settings.depthBits = 24;
  30. settings.stencilBits = 8;
  31.  
  32. // Okno renderingu
  33. sf::Window window(sf::VideoMode(800, 600, 32), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);
  34.  
  35. // Inicjalizacja GLEW
  36. glewExperimental = GL_TRUE;
  37. glewInit();
  38.  
  39. // Utworzenie VAO (Vertex Array Object)
  40. GLuint vao;
  41. glGenVertexArrays(1, &vao);
  42. glBindVertexArray(vao);
  43.  
  44. // Utworzenie VBO (Vertex Buffer Object)
  45. // i skopiowanie do niego danych wierzchołkowych
  46. GLuint vbo;
  47. glGenBuffers(1, &vbo);
  48.  
  49.  
  50. GLfloat vertices[] = {
  51. 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
  52. 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  53. -0.5f, -0.5f, 0.0f, 0.0f, 1.0f
  54. };
  55.  
  56. //Zmiana 1)
  57. /*
  58.  
  59. float vertices[] = {
  60. 0.0f, 0.5f, // Vertex 1 (X, Y)
  61. 0.5f, -0.5f, // Vertex 2 (X, Y)
  62. -0.5f, -0.5f // Vertex 3 (X, Y)
  63. -0.5f, 0.5f // Vertex 3 (X, Y)
  64. };
  65. */
  66. /*
  67. ///Zmiana 2) - odwrócony trójkąt
  68. float vertices[] = {
  69. -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // Top-left
  70. 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // Top-right
  71. 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
  72.  
  73. 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
  74. -0.5f, -0.5f, 1.0f, 1.0f, 1.0f, // Bottom-left
  75. -0.5f, 0.5f, 1.0f, 0.0f, 0.0f // Top-left
  76. };
  77. */
  78. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  79. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  80.  
  81. // Utworzenie i skompilowanie shadera wierzchołków
  82. GLuint vertexShader =
  83. glCreateShader(GL_VERTEX_SHADER);
  84. glShaderSource(vertexShader, 1, &vertexSource, NULL);
  85. glCompileShader(vertexShader);
  86.  
  87. // Utworzenie i skompilowanie shadera fragmentów
  88. GLuint fragmentShader =
  89. glCreateShader(GL_FRAGMENT_SHADER);
  90. glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
  91. glCompileShader(fragmentShader);
  92.  
  93. // Zlinkowanie obu shaderów w jeden wspólny program
  94. GLuint shaderProgram = glCreateProgram();
  95. glAttachShader(shaderProgram, vertexShader);
  96. glAttachShader(shaderProgram, fragmentShader);
  97. glBindFragDataLocation(shaderProgram, 0, "outColor");
  98. glLinkProgram(shaderProgram);
  99. glUseProgram(shaderProgram);
  100.  
  101. // Specifikacja formatu danych wierzchołkowych
  102. GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
  103. glEnableVertexAttribArray(posAttrib);
  104. glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), 0);
  105. GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
  106. glEnableVertexAttribArray(colAttrib);
  107.  
  108. //3)Zepsuje tutaj w tym miejscu ostatni parametr i program zamiast się wysypać zmieni kolor figury w środku
  109.  
  110. glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
  111.  
  112. // Rozpoczęcie pętli zdarzeń
  113. bool running = true;
  114. while (running) {
  115. sf::Event windowEvent;
  116. while (window.pollEvent(windowEvent)) {
  117. switch (windowEvent.type) {
  118. case sf::Event::Closed:
  119. running = false;
  120. break;
  121. }
  122. }
  123. // Nadanie scenie koloru czarnego
  124. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  125. glClear(GL_COLOR_BUFFER_BIT);
  126.  
  127. // Narysowanie trójkąta na podstawie 3 wierzchołków
  128. ///Zmiana 2.1 z 3 wierzchołków na 6 wierzchołków
  129. ///
  130.  
  131. glDrawArrays(GL_TRIANGLES, 0, 3);
  132. // Wymiana buforów tylni/przedni
  133. window.display();
  134. }
  135. // Kasowanie programu i czyszczenie buforów
  136. glDeleteProgram(shaderProgram);
  137. glDeleteShader(fragmentShader);
  138. glDeleteShader(vertexShader);
  139. glDeleteBuffers(1, &vbo);
  140. glDeleteVertexArrays(1, &vao);
  141. // Zamknięcie okna renderingu
  142. window.close();
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement