Cube.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "Cube.h"
  2. // Permet d'éviter la ré-écriture du namespace glm::
  3. using namespace glm;
  4. // Constructeur et Destructeur
  5. Cube::Cube(float taille, std::string const vertexShader, std::string const fragmentShader) : m_shader(vertexShader, fragmentShader)
  6. {
  7. // Chargement du shader
  8. m_shader.charger();
  9. // Division de la taille
  10. taille /= 2;
  11. // Vertices temporaires
  12. float verticesTmp[] = {-taille, -taille, -taille, taille, -taille, -taille, taille, taille, -taille, // Face 1
  13. -taille, -taille, -taille, -taille, taille, -taille, taille, taille, -taille, // Face 1
  14. taille, -taille, taille, taille, -taille, -taille, taille, taille, -taille, // Face 2
  15. taille, -taille, taille, taille, taille, taille, taille, taille, -taille, // Face 2
  16. -taille, -taille, taille, taille, -taille, taille, taille, -taille, -taille, // Face 3
  17. -taille, -taille, taille, -taille, -taille, -taille, taille, -taille, -taille, // Face 3
  18. -taille, -taille, taille, taille, -taille, taille, taille, taille, taille, // Face 4
  19. -taille, -taille, taille, -taille, taille, taille, taille, taille, taille, // Face 4
  20. -taille, -taille, -taille, -taille, -taille, taille, -taille, taille, taille, // Face 5
  21. -taille, -taille, -taille, -taille, taille, -taille, -taille, taille, taille, // Face 5
  22. -taille, taille, taille, taille, taille, taille, taille, taille, -taille, // Face 6
  23. -taille, taille, taille, -taille, taille, -taille, taille, taille, -taille}; // Face 6
  24. // Couleurs temporaires
  25. float couleursTmp[] = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // Face 1
  26. 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // Face 1
  27. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Face 2
  28. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Face 2
  29. 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, // Face 3
  30. 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, // Face 3
  31. 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // Face 4
  32. 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // Face 4
  33. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Face 5
  34. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Face 5
  35. 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, // Face 6
  36. 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0}; // Face 6
  37. // Copie des valeurs dans les tableaux finaux
  38. for(int i(0); i < 108; i++)
  39. {
  40. m_vertices[i] = verticesTmp[i];
  41. m_couleurs[i] = couleursTmp[i];
  42. }
  43. }
  44. Cube::~Cube()
  45. {
  46. }
  47. // Méthodes
  48. void Cube::afficher(glm::mat4 &projection, glm::mat4 &modelview)
  49. {
  50. // Activation du shader
  51. glUseProgram(m_shader.getProgramID());
  52. // Envoi des vertices
  53. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, m_vertices);
  54. glEnableVertexAttribArray(0);
  55. // Envoi de la couleur
  56. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, m_couleurs);
  57. glEnableVertexAttribArray(1);
  58. // Envoi des matrices
  59. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_FALSE, value_ptr(projection));
  60. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_FALSE, value_ptr(modelview));
  61. // Rendu
  62. glDrawArrays(GL_TRIANGLES, 0, 36);
  63. // Désactivation des tableaux
  64. glDisableVertexAttribArray(1);
  65. glDisableVertexAttribArray(0);
  66. // Désactivation du shader
  67. glUseProgram(0);
  68. }