Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Nagłówki
- #include "stdafx.h"
- #include <GL/glew.h>
- #include <SFML/Window.hpp>
- #include <math.h>
- #include <iostream>
- // Kody shaderów
- const GLchar* vertexShaderSource = "#version 330 core\n"
- "in vec3 position;\n"
- "in vec3 color;\n"
- "out vec3 Color;\n"
- "mat3 scale = mat3(\n"
- "vec3(0.5, 0, 0),\n"
- "vec3(0, 1, 0),\n"
- "vec3(0, 0 ,1));\n"
- "void main(){\n"
- "Color = color;\n"
- "gl_Position = vec4(position*scale, 1.0);\n"
- "}\n\0";
- const GLchar* fragmentShaderSource = "#version 330 core\n"
- "in vec3 Color;\n"
- "out vec4 outColor;\n"
- "void main()\n"
- "{\n"
- "outColor = vec4(Color, 1.0);\n"
- "}\n\0";
- int main()
- {
- sf::ContextSettings settings;
- settings.depthBits = 24;
- settings.stencilBits = 8;
- // Okno renderingu
- sf::Window window(sf::VideoMode(800, 600, 32), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);
- // Inicjalizacja GLEW
- glewExperimental = GL_TRUE;
- glewInit();
- // Utworzenie VAO (Vertex Array Object)
- GLuint vao;
- glGenVertexArrays(1, &vao);
- glBindVertexArray(vao);
- // Utworzenie VBO (Vertex Buffer Object)
- // i skopiowanie do niego danych wierzchołkowych
- GLuint vbo;
- glGenBuffers(1, &vbo);
- //GLfloat vertices[] = {
- // 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
- /// 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
- // -0.5f, -0.5f, 0.0f, 0.0f, 1.0f
- //};
- //glBindBuffer(GL_ARRAY_BUFFER, vbo);
- //glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- int punkty_ = 100;
- GLfloat *verticles = new GLfloat[punkty_ * 6];
- float dalfa = 2 * 3.1415 / punkty_;
- float alfa = 0;
- float R = 1;
- for (int i = 0; i < punkty_ * 6; i += 6)
- {
- verticles[i] = R*cos(alfa);
- verticles[i + 1] = R*sin(alfa);
- verticles[i + 2] = 0;
- verticles[i + 3] = (cos(alfa) + 1) / 5.0;
- verticles[i + 4] = (sin(alfa) + 1) / 2.0;
- verticles[i + 5] = (cos(alfa) + 1);
- alfa += dalfa;
- }
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
- glBufferData(GL_ARRAY_BUFFER, sizeof(verticles)*punkty_*6, verticles, GL_STATIC_DRAW);
- delete verticles;
- // Utworzenie i skompilowanie shadera wierzchołków
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
- glCompileShader(vertexShader);
- GLint vert1Compiled;
- glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vert1Compiled);
- if (vert1Compiled != GL_TRUE) {
- std::cerr << "vertexShader did not compile." << std::endl;
- }
- else{
- std::cout << "vertexShader did compile." << std::endl;
- }
- // Utworzenie i skompilowanie shadera fragmentów
- GLuint fragmentShader =
- glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &fragmentShaderSource,NULL);
- glCompileShader(fragmentShader);
- GLint vert2Compiled;
- glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vert2Compiled);
- if (vert2Compiled != GL_TRUE) {
- std::cerr << "fragmentShader did not compile." << std::endl;
- }
- else{
- std::cout << "fragmentShader did compile." << std::endl;
- }
- // Zlinkowanie obu shaderów w jeden wspólny program
- GLuint shaderProgram = glCreateProgram();
- glAttachShader(shaderProgram, vertexShader);
- glAttachShader(shaderProgram, fragmentShader);
- glBindFragDataLocation(shaderProgram, 0, "outColor");
- glLinkProgram(shaderProgram);
- glUseProgram(shaderProgram);
- // Specifikacja formatu danych wierzchołkowych
- GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
- glEnableVertexAttribArray(posAttrib);
- glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), 0);
- GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
- glEnableVertexAttribArray(colAttrib);
- glVertexAttribPointer(colAttrib, 3, GL_FLOAT,GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));
- // Rozpoczęcie pętli zdarzeń
- bool running = true;
- while (running) {
- sf::Event windowEvent;
- while (window.pollEvent(windowEvent)) {
- switch (windowEvent.type) {
- case sf::Event::Closed:
- running = false;
- break;
- }
- }
- // Nadanie scenie koloru czarnego
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- // Narysowanie trójkąta na podstawie 3 wierzchołków
- glDrawArrays(GL_TRIANGLE_FAN, 0, punkty_);
- // Wymiana buforów tylni/przedni
- window.display();
- }
- // Kasowanie programu i czyszczenie buforów
- glDeleteProgram(shaderProgram);
- glDeleteShader(fragmentShader);
- glDeleteShader(vertexShader);
- glDeleteBuffers(1, &vbo);
- glDeleteVertexArrays(1, &vao);
- // Zamknięcie okna renderingu
- window.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement