Advertisement
Miksus

4 trojkaty

Jun 2nd, 2022
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.83 KB | None | 0 0
  1. #include <glad/glad.h>
  2. #include <GLFW/glfw3.h>
  3. #include <glm/glm.hpp>
  4. #include <glm/gtc/matrix_transform.hpp>
  5. #include <glm/gtc/type_ptr.hpp>
  6. #include <iostream>
  7.  
  8.  
  9. const GLchar* vertexShaderSource =
  10. "#version 330 core\n"
  11. "layout(location = 0) in vec3 position;\n"
  12. "layout(location = 1) in vec3 color;\n"
  13. "out vec3 vertexColor;\n"
  14. "uniform mat4 model;\n"
  15. "void main()\n"
  16. "{\n"
  17. "    gl_Position = model * vec4(position.x, position.y, position.z, 1.0);\n"
  18. "    vertexColor = color;\n"
  19. "}\0";
  20.  
  21. const GLchar* fragmentShaderSource =
  22. "#version 330 core\n"
  23. "in vec3 vertexColor;\n"
  24. "out vec4 fragmentColor;\n"
  25. "void main()\n"
  26. "{\n"
  27. "    fragmentColor = vec4(vertexColor, 1.0);\n"
  28. "}\0";
  29.  
  30.  
  31. int main()
  32. {
  33.     // inicjalizacja GLFW
  34.     glfwInit();
  35.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  36.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  37.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  38.  
  39.  
  40.     // Tworzenie okna
  41.     const unsigned int window_width = 1000;
  42.     const unsigned int window_height = 1000;
  43.     GLFWwindow* window = glfwCreateWindow(window_width, window_height, "grafika komputerowa", NULL, NULL);
  44.     if (window == NULL)
  45.     {
  46.         std::cout << "Failed to create GLFW window" << std::endl;
  47.         glfwTerminate();
  48.         return -1;
  49.     }
  50.     glfwMakeContextCurrent(window);
  51.  
  52.  
  53.     // inicjalizacja GLAD
  54.     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
  55.     {
  56.         std::cout << "Failed to initialize GLAD" << std::endl;
  57.         return -1;
  58.     }
  59.  
  60.  
  61.     // shadery
  62.     GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
  63.     glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
  64.     glCompileShader(vertexShader);
  65.  
  66.     GLint status;
  67.     GLchar error_message[512];
  68.     glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
  69.     if (!status)
  70.     {
  71.         glGetShaderInfoLog(vertexShader, 512, NULL, error_message);
  72.         std::cout << "Error (Vertex shader): " << error_message << std::endl;
  73.     }
  74.  
  75.     GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  76.     glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
  77.     glCompileShader(fragmentShader);
  78.  
  79.     glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status);
  80.     if (!status)
  81.     {
  82.         glGetShaderInfoLog(fragmentShader, 512, NULL, error_message);
  83.         std::cout << "Error (Fragment shader): " << error_message << std::endl;
  84.     }
  85.  
  86.     GLuint shaderProgram = glCreateProgram();
  87.     glAttachShader(shaderProgram, vertexShader);
  88.     glAttachShader(shaderProgram, fragmentShader);
  89.     glLinkProgram(shaderProgram);
  90.  
  91.     glGetProgramiv(shaderProgram, GL_LINK_STATUS, &status);
  92.     if (!status)
  93.     {
  94.         glGetProgramInfoLog(shaderProgram, 512, NULL, error_message);
  95.         std::cout << "Error (Shader program): " << error_message << std::endl;
  96.     }
  97.  
  98.     glDetachShader(shaderProgram, vertexShader);
  99.     glDetachShader(shaderProgram, fragmentShader);
  100.     glDeleteShader(vertexShader);
  101.     glDeleteShader(fragmentShader);
  102.  
  103.  
  104.     // vertex data
  105.     GLfloat vertices[] = {
  106.         // coordinates          // colors
  107.          0.0f,  0.2f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1,2 vertex 1, 1
  108.          0.2f,  0.0f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1,2 vertex 2, 3
  109.         -0.2f, -0.0f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1   vertex 3
  110.     };
  111.  
  112.  
  113.     GLuint VAO;
  114.     glGenVertexArrays(1, &VAO);
  115.     glBindVertexArray(VAO);
  116.  
  117.     GLuint VBO;
  118.     glGenBuffers(1, &VBO);
  119.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  120.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  121.  
  122.  
  123.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)0);
  124.     glEnableVertexAttribArray(0);
  125.     glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));
  126.     glEnableVertexAttribArray(1);
  127.  
  128.     glBindVertexArray(0);
  129.  
  130.     glm::mat4 model = glm::mat4(1.0f);
  131.     model = glm::translate(model, glm::vec3(-0.5f, -0.5f, 0.0f));
  132.     glm::mat4 model2 = glm::mat4(1.0f);
  133.     model2 = glm::translate(model2, glm::vec3(0.5f, 0.5f, 0.0f));
  134.     glm::mat4 model3 = glm::mat4(1.0f);
  135.     model3 = glm::translate(model3, glm::vec3(0.5f, -0.5f, 0.0f));
  136.     glm::mat4 model4 = glm::mat4(1.0f);
  137.     model4 = glm::translate(model4, glm::vec3(-0.5f, 0.5f, 0.0f));
  138.     glm::mat4 model5 = glm::mat4(1.0f);
  139.  
  140.     GLint modelLoc;
  141.     modelLoc = glGetUniformLocation(shaderProgram, "model");
  142.  
  143.     glViewport(0, 0, (GLuint)window_width, (GLuint)window_height);
  144.  
  145.     float ysin; float ycos;
  146.  
  147.     // pętla zdarzeń
  148.     while (!glfwWindowShouldClose(window))
  149.     {
  150.         // renderowanie
  151.         glClearColor(0.066f, 0.09f, 0.07f, 1.0f);
  152.         glClear(GL_COLOR_BUFFER_BIT);
  153.  
  154.         ysin = sin(glfwGetTime())/100;
  155.         ycos = cos(glfwGetTime());
  156.        
  157.         model = glm::translate(model, glm::vec3(0.0f, ysin/10, 0.0f));
  158.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
  159.        
  160.         std::cout << ysin << std::endl;
  161.  
  162.         glUseProgram(shaderProgram);
  163.         glBindVertexArray(VAO);
  164.         glDrawArrays(GL_TRIANGLES, 0, 3);
  165.         glBindVertexArray(0);
  166.  
  167.         model2 = glm::rotate(model2, glm::radians(-1.0f), glm::vec3(0.0f, 0.0f, 1.0f));
  168.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model2));
  169.  
  170.         glUseProgram(shaderProgram);
  171.         glBindVertexArray(VAO);
  172.         glDrawArrays(GL_TRIANGLES, 0, 3);
  173.         glBindVertexArray(0);
  174.  
  175.         model3 = glm::scale(model3, glm::vec3(1.0f- ysin, 1.0f - ysin, 1.0f - ysin));
  176.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model3));
  177.  
  178.         glUseProgram(shaderProgram);
  179.         glBindVertexArray(VAO);
  180.         glDrawArrays(GL_TRIANGLES, 0, 3);
  181.         glBindVertexArray(0);
  182.  
  183.         model4 = glm::translate(model4, glm::vec3(ysin, 0.0f, 0.0f));
  184.         model4 = glm::rotate(model4, glm::radians(ycos), glm::vec3(0.0f, 0.0f, 1.0f));
  185.         model4 = glm::scale(model4, glm::vec3(1.0f - ysin, 1.0f - ysin, 1.0f - ysin));        
  186.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model4));      
  187.  
  188.         glUseProgram(shaderProgram);
  189.         glBindVertexArray(VAO);
  190.         glDrawArrays(GL_TRIANGLES, 0, 3);
  191.         glBindVertexArray(0);
  192.  
  193.         //
  194.         glfwSwapBuffers(window);
  195.         glfwPollEvents();
  196.     }
  197.  
  198.     glDeleteVertexArrays(1, &VAO);
  199.     glDeleteBuffers(1, &VBO);
  200.     glDeleteProgram(shaderProgram);
  201.  
  202.     glfwTerminate();
  203.     return 0;
  204. }
  205. #include <glad/glad.h>
  206. #include <GLFW/glfw3.h>
  207. #include <glm/glm.hpp>
  208. #include <glm/gtc/matrix_transform.hpp>
  209. #include <glm/gtc/type_ptr.hpp>
  210. #include <iostream>
  211.  
  212.  
  213. const GLchar* vertexShaderSource =
  214. "#version 330 core\n"
  215. "layout(location = 0) in vec3 position;\n"
  216. "layout(location = 1) in vec3 color;\n"
  217. "out vec3 vertexColor;\n"
  218. "uniform mat4 model;\n"
  219. "void main()\n"
  220. "{\n"
  221. "    gl_Position = model * vec4(position.x, position.y, position.z, 1.0);\n"
  222. "    vertexColor = color;\n"
  223. "}\0";
  224.  
  225. const GLchar* fragmentShaderSource =
  226. "#version 330 core\n"
  227. "in vec3 vertexColor;\n"
  228. "out vec4 fragmentColor;\n"
  229. "void main()\n"
  230. "{\n"
  231. "    fragmentColor = vec4(vertexColor, 1.0);\n"
  232. "}\0";
  233.  
  234.  
  235. int main()
  236. {
  237.     // inicjalizacja GLFW
  238.     glfwInit();
  239.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  240.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  241.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  242.  
  243.  
  244.     // Tworzenie okna
  245.     const unsigned int window_width = 1000;
  246.     const unsigned int window_height = 1000;
  247.     GLFWwindow* window = glfwCreateWindow(window_width, window_height, "grafika komputerowa", NULL, NULL);
  248.     if (window == NULL)
  249.     {
  250.         std::cout << "Failed to create GLFW window" << std::endl;
  251.         glfwTerminate();
  252.         return -1;
  253.     }
  254.     glfwMakeContextCurrent(window);
  255.  
  256.  
  257.     // inicjalizacja GLAD
  258.     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
  259.     {
  260.         std::cout << "Failed to initialize GLAD" << std::endl;
  261.         return -1;
  262.     }
  263.  
  264.  
  265.     // shadery
  266.     GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
  267.     glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
  268.     glCompileShader(vertexShader);
  269.  
  270.     GLint status;
  271.     GLchar error_message[512];
  272.     glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
  273.     if (!status)
  274.     {
  275.         glGetShaderInfoLog(vertexShader, 512, NULL, error_message);
  276.         std::cout << "Error (Vertex shader): " << error_message << std::endl;
  277.     }
  278.  
  279.     GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  280.     glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
  281.     glCompileShader(fragmentShader);
  282.  
  283.     glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status);
  284.     if (!status)
  285.     {
  286.         glGetShaderInfoLog(fragmentShader, 512, NULL, error_message);
  287.         std::cout << "Error (Fragment shader): " << error_message << std::endl;
  288.     }
  289.  
  290.     GLuint shaderProgram = glCreateProgram();
  291.     glAttachShader(shaderProgram, vertexShader);
  292.     glAttachShader(shaderProgram, fragmentShader);
  293.     glLinkProgram(shaderProgram);
  294.  
  295.     glGetProgramiv(shaderProgram, GL_LINK_STATUS, &status);
  296.     if (!status)
  297.     {
  298.         glGetProgramInfoLog(shaderProgram, 512, NULL, error_message);
  299.         std::cout << "Error (Shader program): " << error_message << std::endl;
  300.     }
  301.  
  302.     glDetachShader(shaderProgram, vertexShader);
  303.     glDetachShader(shaderProgram, fragmentShader);
  304.     glDeleteShader(vertexShader);
  305.     glDeleteShader(fragmentShader);
  306.  
  307.  
  308.     // vertex data
  309.     GLfloat vertices[] = {
  310.         // coordinates          // colors
  311.          0.0f,  0.2f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1,2 vertex 1, 1
  312.          0.2f,  0.0f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1,2 vertex 2, 3
  313.         -0.2f, -0.0f, 0.0f,     0.0f, 1.0f, 0.0f, // triangle 1   vertex 3
  314.     };
  315.  
  316.  
  317.     GLuint VAO;
  318.     glGenVertexArrays(1, &VAO);
  319.     glBindVertexArray(VAO);
  320.  
  321.     GLuint VBO;
  322.     glGenBuffers(1, &VBO);
  323.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  324.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  325.  
  326.  
  327.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)0);
  328.     glEnableVertexAttribArray(0);
  329.     glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));
  330.     glEnableVertexAttribArray(1);
  331.  
  332.     glBindVertexArray(0);
  333.  
  334.     glm::mat4 model = glm::mat4(1.0f);
  335.     model = glm::translate(model, glm::vec3(-0.5f, -0.5f, 0.0f));
  336.     glm::mat4 model2 = glm::mat4(1.0f);
  337.     model2 = glm::translate(model2, glm::vec3(0.5f, 0.5f, 0.0f));
  338.     glm::mat4 model3 = glm::mat4(1.0f);
  339.     model3 = glm::translate(model3, glm::vec3(0.5f, -0.5f, 0.0f));
  340.     glm::mat4 model4 = glm::mat4(1.0f);
  341.     model4 = glm::translate(model4, glm::vec3(-0.5f, 0.5f, 0.0f));
  342.     glm::mat4 model5 = glm::mat4(1.0f);
  343.  
  344.     GLint modelLoc;
  345.     modelLoc = glGetUniformLocation(shaderProgram, "model");
  346.  
  347.     glViewport(0, 0, (GLuint)window_width, (GLuint)window_height);
  348.  
  349.     float ysin; float ycos;
  350.  
  351.     // pętla zdarzeń
  352.     while (!glfwWindowShouldClose(window))
  353.     {
  354.         // renderowanie
  355.         glClearColor(0.066f, 0.09f, 0.07f, 1.0f);
  356.         glClear(GL_COLOR_BUFFER_BIT);
  357.  
  358.         ysin = sin(glfwGetTime())/100;
  359.         ycos = cos(glfwGetTime());
  360.        
  361.         model = glm::translate(model, glm::vec3(0.0f, ysin/10, 0.0f));
  362.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
  363.        
  364.         std::cout << ysin << std::endl;
  365.  
  366.         glUseProgram(shaderProgram);
  367.         glBindVertexArray(VAO);
  368.         glDrawArrays(GL_TRIANGLES, 0, 3);
  369.         glBindVertexArray(0);
  370.  
  371.         model2 = glm::rotate(model2, glm::radians(-1.0f), glm::vec3(0.0f, 0.0f, 1.0f));
  372.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model2));
  373.  
  374.         glUseProgram(shaderProgram);
  375.         glBindVertexArray(VAO);
  376.         glDrawArrays(GL_TRIANGLES, 0, 3);
  377.         glBindVertexArray(0);
  378.  
  379.         model3 = glm::scale(model3, glm::vec3(1.0f- ysin, 1.0f - ysin, 1.0f - ysin));
  380.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model3));
  381.  
  382.         glUseProgram(shaderProgram);
  383.         glBindVertexArray(VAO);
  384.         glDrawArrays(GL_TRIANGLES, 0, 3);
  385.         glBindVertexArray(0);
  386.  
  387.         model4 = glm::translate(model4, glm::vec3(ysin, 0.0f, 0.0f));
  388.         model4 = glm::rotate(model4, glm::radians(ycos), glm::vec3(0.0f, 0.0f, 1.0f));
  389.         model4 = glm::scale(model4, glm::vec3(1.0f - ysin, 1.0f - ysin, 1.0f - ysin));        
  390.         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model4));      
  391.  
  392.         glUseProgram(shaderProgram);
  393.         glBindVertexArray(VAO);
  394.         glDrawArrays(GL_TRIANGLES, 0, 3);
  395.         glBindVertexArray(0);
  396.  
  397.         //
  398.         glfwSwapBuffers(window);
  399.         glfwPollEvents();
  400.     }
  401.  
  402.     glDeleteVertexArrays(1, &VAO);
  403.     glDeleteBuffers(1, &VBO);
  404.     glDeleteProgram(shaderProgram);
  405.  
  406.     glfwTerminate();
  407.     return 0;
  408. }
  409.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement