Caisse.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "Caisse.h"
  2. // Permet d'éviter la ré-écriture du namespace glm::
  3. using namespace glm;
  4. // Constructeur et Destructeur
  5. Caisse::Caisse(float taille, std::string const vertexShader,std::string const fragmentShader, std::string const texture)
  6. : Cube(taille, vertexShader, fragmentShader), m_texture(), m_tailleCoordTextureBytes(72 * sizeof(float))
  7. {
  8. // Chargement de la texture
  9. m_texture.charger(texture);
  10. // Coordonnées de texture temporaires
  11. float coordTextureTmp[] = {0, 0, 1, 0, 1, 1, // Face 1
  12. 0, 0, 0, 1, 1, 1, // Face 1
  13. 0, 0, 1, 0, 1, 1, // Face 2
  14. 0, 0, 0, 1, 1, 1, // Face 2
  15. 0, 0, 1, 0, 1, 1, // Face 3
  16. 0, 0, 0, 1, 1, 1, // Face 3
  17. 0, 0, 1, 0, 1, 1, // Face 4
  18. 0, 0, 0, 1, 1, 1, // Face 4
  19. 0, 0, 1, 0, 1, 1, // Face 5
  20. 0, 0, 0, 1, 1, 1, // Face 5
  21. 0, 0, 1, 0, 1, 1, // Face 6
  22. 0, 0, 0, 1, 1, 1}; // Face 6
  23. // Copie des valeurs dans le tableau final
  24. for(int i (0); i < 72; i++)
  25. m_coordTexture[i] = coordTextureTmp[i];
  26. }
  27. Caisse::~Caisse()
  28. {}
  29. // Méthodes
  30. void Caisse::charger()
  31. {
  32. /// Chargement Vertex Buffer Object
  33. // Destruction d'un éventuel ancien VBO
  34. if(glIsBuffer(m_vboID) == GL_TRUE)
  35. glDeleteBuffers(1, &m_vboID);
  36. // Génération de l'ID
  37. glGenBuffers(1, &m_vboID);
  38. // Verrouillage du VBO
  39. glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
  40. // Allocation de la mémoire vidéo
  41. glBufferData(GL_ARRAY_BUFFER, m_tailleVerticesBytes + m_tailleCoordTextureBytes, 0, GL_STATIC_DRAW);
  42. // Transfert des données
  43. glBufferSubData(GL_ARRAY_BUFFER, 0, m_tailleVerticesBytes, m_vertices);
  44. glBufferSubData(GL_ARRAY_BUFFER, m_tailleVerticesBytes, m_tailleCoordTextureBytes, m_coordTexture);
  45. // Déverrouillage de l'objet
  46. glBindBuffer(GL_ARRAY_BUFFER, 0);
  47. /// Chargement Vertex Array Object
  48. // Destruction d'un éventuel ancien VAO
  49. if(glIsVertexArray(m_vaoID) == GL_TRUE)
  50. glDeleteVertexArrays(1, &m_vaoID);
  51. // Génération de l'ID du VAO
  52. glGenVertexArrays(1, &m_vaoID);
  53. // Verrouillage du VAO
  54. glBindVertexArray(m_vaoID);
  55. // Verrouillage du VBO
  56. glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
  57. // Accès aux vertices dans la mémoire vidéo
  58. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
  59. glEnableVertexAttribArray(0);
  60. // Accès aux coordonnées de texture dans la mémoire vidéo
  61. glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(m_tailleVerticesBytes));
  62. glEnableVertexAttribArray(2);
  63. // Déverrouillage du VBO
  64. glBindBuffer(GL_ARRAY_BUFFER, 0);
  65. // Déverrouillage du VAO
  66. glBindVertexArray(0);
  67. }
  68. void Caisse::afficher(glm::mat4 &projection, glm::mat4 &modelview)
  69. {
  70. // Activation du shader
  71. glUseProgram(m_shader.getProgramID());
  72. // Verrouillage du VAO
  73. glBindVertexArray(m_vaoID);
  74. // Envoi des matrices
  75. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_FALSE, value_ptr(projection));
  76. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_FALSE, value_ptr(modelview));
  77. // Verrouillage de la texture
  78. glBindTexture(GL_TEXTURE_2D, m_texture.getID());
  79. // Rendu
  80. glDrawArrays(GL_TRIANGLES, 0, 36);
  81. // Déverrouillage de la texture
  82. glBindTexture(GL_TEXTURE_2D, 0);
  83. // Déverrouillage du VAO
  84. glBindVertexArray(0);
  85. // Désactivation du shader
  86. glUseProgram(0);
  87. }