Advertisement
Guest User

Untitled

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