Advertisement
adwas33

Untitled

Mar 11th, 2022
1,594
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.25 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.     ///Zmiana 2) - odwrócony trójkąt
  67.     float vertices[] = {
  68.     -0.5f,  0.5f, 1.0f, 0.0f, 0.0f, // Top-left
  69.      0.5f,  0.5f, 0.0f, 1.0f, 0.0f, // Top-right
  70.      0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
  71.  
  72.      0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
  73.     -0.5f, -0.5f, 1.0f, 1.0f, 1.0f, // Bottom-left
  74.     -0.5f,  0.5f, 1.0f, 0.0f, 0.0f  // Top-left
  75.     };
  76.  
  77.     glBindBuffer(GL_ARRAY_BUFFER, vbo);
  78.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  79.  
  80.     // Utworzenie i skompilowanie shadera wierzchołków
  81.     GLuint vertexShader =
  82.         glCreateShader(GL_VERTEX_SHADER);
  83.     glShaderSource(vertexShader, 1, &vertexSource, NULL);
  84.     glCompileShader(vertexShader);
  85.  
  86.     // Utworzenie i skompilowanie shadera fragmentów
  87.     GLuint fragmentShader =
  88.         glCreateShader(GL_FRAGMENT_SHADER);
  89.     glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
  90.     glCompileShader(fragmentShader);
  91.  
  92.     // Zlinkowanie obu shaderów w jeden wspólny program
  93.     GLuint shaderProgram = glCreateProgram();
  94.     glAttachShader(shaderProgram, vertexShader);
  95.     glAttachShader(shaderProgram, fragmentShader);
  96.     glBindFragDataLocation(shaderProgram, 0, "outColor");
  97.     glLinkProgram(shaderProgram);
  98.     glUseProgram(shaderProgram);
  99.  
  100.     // Specifikacja formatu danych wierzchołkowych
  101.     GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
  102.     glEnableVertexAttribArray(posAttrib);
  103.     glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), 0);
  104.     GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
  105.     glEnableVertexAttribArray(colAttrib);
  106.  
  107.     //3)Zepsuje tutaj w tym miejscu ostatni parametr i program zamiast się wysypać zmieni kolor figury w środku
  108.  
  109.     glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (void*)(0 * sizeof(GLfloat)));
  110.  
  111.     // Rozpoczęcie pętli zdarzeń
  112.     bool running = true;
  113.     while (running) {
  114.         sf::Event windowEvent;
  115.         while (window.pollEvent(windowEvent)) {
  116.             switch (windowEvent.type) {
  117.             case sf::Event::Closed:
  118.                 running = false;
  119.                 break;
  120.             }
  121.         }
  122.         // Nadanie scenie koloru czarnego
  123.         glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  124.         glClear(GL_COLOR_BUFFER_BIT);
  125.  
  126.         // Narysowanie trójkąta na podstawie 3 wierzchołków
  127.         ///Zmiana 2.1 z 3 wierzchołków na 6 wierzchołków
  128.         ///
  129.         glDrawArrays(GL_TRIANGLES, 0, 6);
  130.         // Wymiana buforów tylni/przedni
  131.         window.display();
  132.     }
  133.     // Kasowanie programu i czyszczenie buforów
  134.     glDeleteProgram(shaderProgram);
  135.     glDeleteShader(fragmentShader);
  136.     glDeleteShader(vertexShader);
  137.     glDeleteBuffers(1, &vbo);
  138.     glDeleteVertexArrays(1, &vao);
  139.     // Zamknięcie okna renderingu
  140.     window.close();
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement