Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Dependencies\glew\glew.h"
- #include "Dependencies\freeglut\freeglut.h"
- #include <iostream>
- #include <stdio.h>
- #include "Dependencies\glm\glm\ext.hpp"
- #include "Dependencies\glm\glm\gtc\matrix_transform.hpp"
- #include "Dependencies\glm\glm\gtc\type_ptr.hpp"
- #include "shader_stuff.h"
- #include "teapot.h"
- // ---------------------------------------
- // Identyfikatory obiektow
- GLuint program;
- GLuint vBuffer_coord;
- GLuint vBuffer_color;
- GLuint vBuffer_indices;
- GLuint vArray;
- // ---------------------------------------
- // Macierze przeksztalcen i rzutowania
- glm::mat4x4 Matrix_proj; // projection matrix
- glm::mat4x4 Matrix_mv; // modelview matrix
- glm::mat4x4 Matrix_proj_mv; // projection*modelview matrix
- // ---------------------------------------
- void DisplayScene()
- {
- // Czyszczenie ramki
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // -----------------------------------
- // 1. Geometria sceny
- Matrix_mv = glm::mat4x4(1.0);
- Matrix_mv = glm::translate(Matrix_mv, glm::vec3(_scene_translate_x, 0.0f, -5.0f));
- Matrix_mv = glm::rotate(Matrix_mv, _scene_rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
- Matrix_mv = glm::rotate(Matrix_mv, _scene_rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
- // Obliczanie macierzy rzutowania i przekazanie do shaderow
- Matrix_proj_mv = Matrix_proj * Matrix_mv;
- glUniformMatrix4fv(glGetUniformLocation(program, "Matrix_proj_mv"), 1, GL_FALSE, glm::value_ptr(Matrix_proj_mv));
- // -----------------------------------
- // 2. Generowanie obiektow na ekranie
- //glDrawElements(GL_TRIANGLES, TEAPOT_INDICES_COUNT, GL_UNSIGNED_INT, NULL);
- glDrawElements(GL_TRIANGLES, 3 * TEAPOT_VERTEX_COUNT, GL_UNSIGNED_INT, NULL);
- //glDrawArrays(GL_TRIANGLES, 0, TEAPOT_VERTEX_COUNT);
- glutSwapBuffers();
- }
- // ---------------------------------------
- void Reshape(int width, int height)
- {
- glViewport(0, 0, width, height);
- //Matrix_proj = glm::frustum( -1.0f, 1.0f, (-1.0f*height)/width, 1.0f*height/width, 1.0f, 4.f );
- Matrix_proj = glm::perspectiveFov(glm::radians(60.0f), (float)width, (float)height, 0.1f, 100.f);
- }
- // ---------------------------------------------------
- void Initialize()
- {
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- // 1. Programowanie potoku
- program = glCreateProgram();
- glAttachShader(program, LoadShader(GL_VERTEX_SHADER, "vertex.glsl"));
- glAttachShader(program, LoadShader(GL_FRAGMENT_SHADER, "fragment.glsl"));
- LinkAndValidateProgram(program);
- // 2. Vertex arrays
- glGenVertexArrays(1, &vArray);
- glBindVertexArray(vArray);
- // Wspolrzedne wierzchokow
- glGenBuffers(1, &vBuffer_coord);
- glBindBuffer(GL_ARRAY_BUFFER, vBuffer_coord);
- glBufferData(GL_ARRAY_BUFFER, sizeof(teapotPosition), teapotPosition, GL_STATIC_DRAW);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
- glEnableVertexAttribArray(0);
- //// Kolor wierzcholkow
- //glGenBuffers(1, &vBuffer_color);
- //glBindBuffer(GL_ARRAY_BUFFER, vBuffer_color);
- //glBufferData(GL_ARRAY_BUFFER, sizeof(cube_color), cube_color, GL_STATIC_DRAW);
- //glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
- //glEnableVertexAttribArray(1);
- // BUFOR: Indeksy wierzcholkow
- glGenBuffers(1, &vBuffer_indices);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vBuffer_indices);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(teapotIndices), teapotIndices, GL_STATIC_DRAW);
- glBindVertexArray(0);
- glEnable(GL_DEPTH_TEST);
- // Wlaczenie VA i programu
- glBindVertexArray(vArray);
- glUseProgram(program);
- }
- // ---------------------------------------------------
- int main(int argc, char* argv[])
- {
- // GLUT
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitContextVersion(3, 2);
- glutInitContextProfile(GLUT_CORE_PROFILE);
- glutInitWindowSize(500, 500);
- glutCreateWindow("Cube");
- // GLEW
- glewExperimental = GL_TRUE;
- GLenum err = glewInit();
- if (GLEW_OK != err)
- {
- printf("GLEW Error\n");
- exit(1);
- }
- // OpenGL
- if (!GLEW_VERSION_3_2)
- {
- printf("Brak OpenGL 3.2!\n");
- exit(1);
- }
- Initialize();
- glutDisplayFunc(DisplayScene);
- glutReshapeFunc(Reshape);
- glutMouseFunc(MouseButton);
- glutMotionFunc(MouseMotion);
- glutMouseWheelFunc(MouseWheel);
- glutKeyboardFunc(Keyboard);
- glutSpecialFunc(SpecialKeys);
- glutMainLoop();
- // Cleaning();
- glDeleteProgram(program);
- glDeleteBuffers(1, &vBuffer_coord);
- glDeleteBuffers(1, &vBuffer_color);
- glDeleteVertexArrays(1, &vArray);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement