Advertisement
Benjamin_Loison

Rotating cube

Apr 21st, 2018
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.64 KB | None | 0 0
  1. #define GLEW_STATIC
  2. #include <GL/glew.h>
  3. #include <GL/gl.h>
  4. #include <GL/glu.h>
  5. #include <glm.hpp>
  6. #include <gtx/transform.hpp>
  7. #include <gtc/type_ptr.hpp>
  8.  
  9. #include <SDL.h>
  10. #include <SDL_image.h>
  11. #include <iostream>
  12.  
  13. #include "Shader.h"
  14. #include "textures.h"
  15.  
  16. int main(int argc, char **argv)
  17. {
  18.     SDL_Window* fenetre(0);
  19.     SDL_GLContext contexteOpenGL(0);
  20.  
  21.     SDL_Event evenements;
  22.     bool terminer(false);
  23.     if(SDL_Init(SDL_INIT_VIDEO) < 0)
  24.     {
  25.         std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
  26.         SDL_Quit();
  27.  
  28.         return -1;
  29.     }
  30.  
  31.     fenetre = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
  32.  
  33.     contexteOpenGL = SDL_GL_CreateContext(fenetre);
  34.  
  35.     GLenum initialisationGLEW( glewInit() );
  36.     glEnable(GL_DEPTH_TEST);
  37.  
  38.     //Shader shader("shader.vs", "shader.fs");
  39.     Shader shader("Shaders/couleur3D.vert", "Shaders/couleur3D.frag");
  40.  
  41.  
  42.     float vertices[] = {-1.0, -1.0, -1.0,   1.0, -1.0, -1.0,   1.0, 1.0, -1.0,     // Face 1
  43.                     -1.0, -1.0, -1.0,   -1.0, 1.0, -1.0,   1.0, 1.0, -1.0,     // Face 1
  44.  
  45.                     1.0, -1.0, 1.0,   1.0, -1.0, -1.0,   1.0, 1.0, -1.0,       // Face 2
  46.                     1.0, -1.0, 1.0,   1.0, 1.0, 1.0,   1.0, 1.0, -1.0,         // Face 2
  47.  
  48.                     -1.0, -1.0, 1.0,   1.0, -1.0, 1.0,   1.0, -1.0, -1.0,      // Face 3
  49.                     -1.0, -1.0, 1.0,   -1.0, -1.0, -1.0,   1.0, -1.0, -1.0,    // Face 3
  50.  
  51.                     -1.0, -1.0, 1.0,   1.0, -1.0, 1.0,   1.0, 1.0, 1.0,        // Face 4
  52.                     -1.0, -1.0, 1.0,   -1.0, 1.0, 1.0,   1.0, 1.0, 1.0,        // Face 4
  53.  
  54.                     -1.0, -1.0, -1.0,   -1.0, -1.0, 1.0,   -1.0, 1.0, 1.0,     // Face 5
  55.                     -1.0, -1.0, -1.0,   -1.0, 1.0, -1.0,   -1.0, 1.0, 1.0,     // Face 5
  56.  
  57.                     -1.0, 1.0, 1.0,   1.0, 1.0, 1.0,   1.0, 1.0, -1.0,         // Face 6
  58.                     -1.0, 1.0, 1.0,   -1.0, 1.0, -1.0,   1.0, 1.0, -1.0};      // Face 6
  59.  
  60.     float couleurs[] = {1.0, 0.0, 0.0,   1.0, 0.0, 0.0,   1.0, 0.0, 0.0,           // Face 1
  61.                     1.0, 0.0, 0.0,   1.0, 0.0, 0.0,   1.0, 0.0, 0.0,           // Face 1
  62.  
  63.                     0.0, 1.0, 0.0,   0.0, 1.0, 0.0,   0.0, 1.0, 0.0,           // Face 2
  64.                     0.0, 1.0, 0.0,   0.0, 1.0, 0.0,   0.0, 1.0, 0.0,           // Face 2
  65.  
  66.                     0.0, 0.0, 1.0,   0.0, 0.0, 1.0,   0.0, 0.0, 1.0,           // Face 3
  67.                     0.0, 0.0, 1.0,   0.0, 0.0, 1.0,   0.0, 0.0, 1.0,           // Face 3
  68.  
  69.                     1.0, 0.0, 0.0,   1.0, 0.0, 0.0,   1.0, 0.0, 0.0,           // Face 4
  70.                     1.0, 0.0, 0.0,   1.0, 0.0, 0.0,   1.0, 0.0, 0.0,           // Face 4
  71.  
  72.                     0.0, 1.0, 0.0,   0.0, 1.0, 0.0,   0.0, 1.0, 0.0,           // Face 5
  73.                     0.0, 1.0, 0.0,   0.0, 1.0, 0.0,   0.0, 1.0, 0.0,           // Face 5
  74.  
  75.                     0.0, 0.0, 1.0,   0.0, 0.0, 1.0,   0.0, 0.0, 1.0,           // Face 6
  76.                     0.0, 0.0, 1.0,   0.0, 0.0, 1.0,   0.0, 0.0, 1.0};          // Face 6
  77.     unsigned int VBO, VAO;
  78.     glGenVertexArrays(1, &VAO);
  79.     glGenBuffers(1, &VBO);
  80.  
  81.     glBindVertexArray(VAO);
  82.  
  83.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  84.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(couleurs), 0, GL_STATIC_DRAW);
  85.     glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
  86.     glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(couleurs), couleurs);
  87.  
  88.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
  89.     glEnableVertexAttribArray(0);
  90.  
  91.     glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, ((char*)NULL + (sizeof(couleurs))));
  92.     glEnableVertexAttribArray(1);
  93.  
  94.  
  95.     //GLuint texture = loadTexture("wall.jpg", 1);
  96.  
  97.     //3d matrices
  98.     glm::mat4 projection;
  99.     glm::mat4 modelview;
  100.  
  101.     projection = glm::perspective(70.0, (double) 800 / 600, 1.0, 10000.0);
  102.     modelview = glm::mat4(1.0);
  103.  
  104.     float angle(0.0);
  105.  
  106.     unsigned long fps = 0;
  107.     Uint32 time = SDL_GetTicks();
  108.  
  109.     while(!terminer)
  110.     {
  111.         SDL_PollEvent(&evenements);
  112.  
  113.         switch(evenements.type)
  114.         {
  115.             case SDL_WINDOWEVENT:
  116.                 if(evenements.window.event == SDL_WINDOWEVENT_CLOSE)
  117.                     terminer = true;
  118.                 break;
  119.  
  120.             case SDL_KEYDOWN:
  121.                 switch(evenements.key.keysym.scancode)
  122.                 {
  123.                     case SDL_SCANCODE_ESCAPE:
  124.                         terminer = true;
  125.                     break;
  126.                 }
  127.                 break;
  128.         }
  129.  
  130.  
  131.         if(SDL_GetTicks() - time >= 1000)
  132.         {
  133.             std::cout << fps << std::endl;
  134.             time = SDL_GetTicks();
  135.             fps = 0;
  136.         }
  137.         else
  138.             fps++;
  139.  
  140.         //Clear scren
  141.         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  142.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  143.  
  144.         modelview = glm::lookAt(glm::vec3(3, 3, 3), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
  145.  
  146.         modelview = glm::rotate(modelview, angle, glm::vec3(0, 1, 0));
  147.  
  148.         // render container
  149.         shader.use();
  150.         glBindVertexArray(VAO);
  151.  
  152.         // On envoie les matrices au shader
  153.         shader.setMat4("projection", projection);
  154.         shader.setMat4("modelview", modelview);
  155.  
  156.         // On affiche le polygone
  157.  
  158.         glDrawArrays(GL_TRIANGLES, 0, 36);
  159.  
  160.         //Update screen
  161.         //SDL_GL_SwapWindow(fenetre);
  162.         angle += 4.0;
  163.  
  164.         if(angle >= 360.0)
  165.             angle -= 360.0;
  166.  
  167.         //SDL_Delay(50);
  168.     }
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement