Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "glew.h"
- #include "freeglut.h"
- #include "glm.hpp"
- #include "ext.hpp"
- #include <iostream>
- #include <cmath>
- #include "Shader_Loader.h"
- #include "Render_Utils.h"
- #include "Box.cpp"
- GLuint program;
- Core::Shader_Loader shaderLoader;
- glm::mat4 createPerspectiveMatrix()
- {
- const float zNear = 0.1f, zFar = 10.0f;
- const float frustumScale = 1.0f;
- glm::mat4 perspective;
- perspective[0][0] = frustumScale;
- perspective[1][1] = frustumScale;
- perspective[2][2] = (zFar + zNear) / (zNear - zFar);
- perspective[3][2] = (2 * zFar * zNear) / (zNear - zFar);
- perspective[2][3] = -1;
- perspective[3][3] = 0;
- return perspective;
- }
- void renderScene()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glClearColor(0.0f, 0.3f, 0.3f, 1.0f);
- // ZADANIE: Add a second, smaller box to the scene using the scaling transformation. Make it rotate around the first box.
- glUseProgram(program);
- Core::VertexData VertexData;
- VertexData.NumActiveAttribs = 2;
- VertexData.Attribs[0].Pointer = boxPositions;
- VertexData.Attribs[0].Size = 4;
- VertexData.Attribs[1].Pointer = boxColors;
- VertexData.Attribs[1].Size = 4;
- VertexData.NumVertices = 36;
- glm::mat4 transformation = glm::translate(glm::vec3(-0.4f, 0.3f, -2.0f));
- float time = glutGet(GLUT_ELAPSED_TIME) / 1000.0f;
- float t = sin(time) * 0.2f;
- glm::mat4 persp = createPerspectiveMatrix();
- transformation = persp * transformation;
- glm::mat4 trans;
- trans = glm::rotate(
- trans,
- time * glm::radians(180.0f),
- glm::vec3(0.0f, 0.0f, 1.0f)
- );
- transformation *= trans;
- glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)& transformation);
- Core::DrawVertexArray(VertexData);
- glm::mat4 Transformation = glm::translate(glm::mat4(), glm::vec3(0.0f, 0.0f, -2.0f));
- glm::mat4 scale = glm::scale(glm::vec3(0.4f, 0.4f, 0.4f));
- glm::mat4 o1 = glm::translate(glm::vec3(-0.4f, 0.3f, -2.0f));
- glm::mat4 mo1 = glm::translate(glm::mat4(), glm::vec3(0.4f, -0.3f, 2.0f));
- glm::mat4 t2;
- t2 = glm::rotate(
- time * glm::radians(180.0f),
- glm::vec3(0.0f, 0.0f, 1.0f)
- );
- Transformation = persp * Transformation * scale;
- Transformation = o1 * t2 * mo1*Transformation;
- glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)& Transformation);
- Core::DrawVertexArray(VertexData);
- glUseProgram(0);
- glutSwapBuffers();
- }
- void init()
- {
- glEnable(GL_DEPTH_TEST);
- program = shaderLoader.CreateProgram("shaders/shader_2_1.vert", "shaders/shader_2_1.frag");
- }
- void shutdown()
- {
- shaderLoader.DeleteProgram(program);
- }
- void idle()
- {
- glutPostRedisplay();
- }
- int main(int argc, char ** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
- glutInitWindowPosition(200, 200);
- glutInitWindowSize(600, 600);
- glutCreateWindow("OpenGL Pierwszy Program");
- glewInit();
- init();
- glutDisplayFunc(renderScene);
- glutIdleFunc(idle);
- glutMainLoop();
- shutdown();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement