Advertisement
Guest User

Untitled

a guest
May 25th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. // Nagłówki
  2.  
  3. #include "stdafx.h"
  4. #include <GL/glew.h>
  5. #include <SFML/Window.hpp>
  6. #include <math.h>
  7. #include <iostream>
  8. // Kody shaderów
  9. const GLchar* vertexShaderSource = "#version 330 core\n"
  10. "in vec3 position;\n"
  11. "in vec3 color;\n"
  12. "out vec3 Color;\n"
  13. "mat3 scale = mat3(\n"
  14. "vec3(0.5, 0, 0),\n"
  15. "vec3(0, 1, 0),\n"
  16. "vec3(0, 0 ,1));\n"
  17. "void main(){\n"
  18. "Color = color;\n"
  19. "gl_Position = vec4(position*scale, 1.0);\n"
  20. "}\n\0";
  21.  
  22. const GLchar* fragmentShaderSource = "#version 330 core\n"
  23. "in vec3 Color;\n"
  24. "out vec4 outColor;\n"
  25. "void main()\n"
  26. "{\n"
  27. "outColor = vec4(Color, 1.0);\n"
  28. "}\n\0";
  29.  
  30.  
  31.  
  32. int main()
  33. {
  34. sf::ContextSettings settings;
  35. settings.depthBits = 24;
  36. settings.stencilBits = 8;
  37.  
  38. // Okno renderingu
  39. sf::Window window(sf::VideoMode(800, 600, 32), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);
  40.  
  41. // Inicjalizacja GLEW
  42. glewExperimental = GL_TRUE;
  43. glewInit();
  44.  
  45. // Utworzenie VAO (Vertex Array Object)
  46. GLuint vao;
  47. glGenVertexArrays(1, &vao);
  48. glBindVertexArray(vao);
  49.  
  50. // Utworzenie VBO (Vertex Buffer Object)
  51. // i skopiowanie do niego danych wierzchołkowych
  52. GLuint vbo;
  53. glGenBuffers(1, &vbo);
  54.  
  55. //GLfloat vertices[] = {
  56. // 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
  57. /// 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
  58. // -0.5f, -0.5f, 0.0f, 0.0f, 1.0f
  59. //};
  60. //glBindBuffer(GL_ARRAY_BUFFER, vbo);
  61. //glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  62.  
  63. int punkty_ = 100;
  64. GLfloat *verticles = new GLfloat[punkty_ * 6];
  65. float dalfa = 2 * 3.1415 / punkty_;
  66. float alfa = 0;
  67. float R = 1;
  68.  
  69. for (int i = 0; i < punkty_ * 6; i += 6)
  70. {
  71. verticles[i] = R*cos(alfa);
  72. verticles[i + 1] = R*sin(alfa);
  73. verticles[i + 2] = 0;
  74.  
  75. verticles[i + 3] = (cos(alfa) + 1) / 5.0;
  76. verticles[i + 4] = (sin(alfa) + 1) / 2.0;
  77. verticles[i + 5] = (cos(alfa) + 1);
  78.  
  79. alfa += dalfa;
  80. }
  81.  
  82. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  83. glBufferData(GL_ARRAY_BUFFER, sizeof(verticles)*punkty_*6, verticles, GL_STATIC_DRAW);
  84. delete verticles;
  85.  
  86. // Utworzenie i skompilowanie shadera wierzchołków
  87. GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
  88. glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
  89. glCompileShader(vertexShader);
  90.  
  91. GLint vert1Compiled;
  92. glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vert1Compiled);
  93. if (vert1Compiled != GL_TRUE) {
  94. std::cerr << "vertexShader did not compile." << std::endl;
  95. }
  96. else{
  97. std::cout << "vertexShader did compile." << std::endl;
  98. }
  99.  
  100. // Utworzenie i skompilowanie shadera fragmentów
  101. GLuint fragmentShader =
  102. glCreateShader(GL_FRAGMENT_SHADER);
  103. glShaderSource(fragmentShader, 1, &fragmentShaderSource,NULL);
  104. glCompileShader(fragmentShader);
  105.  
  106. GLint vert2Compiled;
  107. glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vert2Compiled);
  108. if (vert2Compiled != GL_TRUE) {
  109. std::cerr << "fragmentShader did not compile." << std::endl;
  110. }
  111. else{
  112. std::cout << "fragmentShader did compile." << std::endl;
  113. }
  114.  
  115.  
  116. // Zlinkowanie obu shaderów w jeden wspólny program
  117. GLuint shaderProgram = glCreateProgram();
  118. glAttachShader(shaderProgram, vertexShader);
  119. glAttachShader(shaderProgram, fragmentShader);
  120. glBindFragDataLocation(shaderProgram, 0, "outColor");
  121. glLinkProgram(shaderProgram);
  122. glUseProgram(shaderProgram);
  123.  
  124. // Specifikacja formatu danych wierzchołkowych
  125. GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
  126. glEnableVertexAttribArray(posAttrib);
  127. glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), 0);
  128. GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
  129. glEnableVertexAttribArray(colAttrib);
  130. glVertexAttribPointer(colAttrib, 3, GL_FLOAT,GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));
  131.  
  132. // Rozpoczęcie pętli zdarzeń
  133. bool running = true;
  134. while (running) {
  135. sf::Event windowEvent;
  136. while (window.pollEvent(windowEvent)) {
  137. switch (windowEvent.type) {
  138. case sf::Event::Closed:
  139. running = false;
  140. break;
  141. }
  142. }
  143. // Nadanie scenie koloru czarnego
  144. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  145. glClear(GL_COLOR_BUFFER_BIT);
  146.  
  147. // Narysowanie trójkąta na podstawie 3 wierzchołków
  148. glDrawArrays(GL_TRIANGLE_FAN, 0, punkty_);
  149. // Wymiana buforów tylni/przedni
  150. window.display();
  151. }
  152. // Kasowanie programu i czyszczenie buforów
  153. glDeleteProgram(shaderProgram);
  154. glDeleteShader(fragmentShader);
  155. glDeleteShader(vertexShader);
  156. glDeleteBuffers(1, &vbo);
  157. glDeleteVertexArrays(1, &vao);
  158. // Zamknięcie okna renderingu
  159. window.close();
  160. return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement