Caisse.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 texture) : Cube(taille),
  6. m_texture(texture),
  7. m_tailleCoordTextureBytes(72 * sizeof(float))
  8. {
  9. // Coordonnées de texture temporaires
  10. float coordTextureTmp[] = {0, 0, 1, 0, 1, 1, // Face 1
  11. 0, 0, 0, 1, 1, 1, // Face 1
  12. 0, 0, 1, 0, 1, 1, // Face 2
  13. 0, 0, 0, 1, 1, 1, // Face 2
  14. 0, 0, 1, 0, 1, 1, // Face 3
  15. 0, 0, 0, 1, 1, 1, // Face 3
  16. 0, 0, 1, 0, 1, 1, // Face 4
  17. 0, 0, 0, 1, 1, 1, // Face 4
  18. 0, 0, 1, 0, 1, 1, // Face 5
  19. 0, 0, 0, 1, 1, 1, // Face 5
  20. 0, 0, 1, 0, 1, 1, // Face 6
  21. 0, 0, 0, 1, 1, 1}; // Face 6
  22. // Copie des valeurs dans le tableau final
  23. for(int i (0); i < 72; i++)
  24. m_coordTexture[i] = coordTextureTmp[i];
  25. // Chargement automatique
  26. charger();
  27. }
  28. Caisse::~Caisse()
  29. {
  30. }
  31. // Méthodes
  32. void Caisse::charger()
  33. {
  34. // Destruction d'un éventuel ancien VBO
  35. if(glIsBuffer(m_vboID) == GL_TRUE)
  36. glDeleteBuffers(1, &m_vboID);
  37. // Génération de l'ID
  38. glGenBuffers(1, &m_vboID);
  39. // Verrouillage du VBO
  40. glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
  41. // Allocation de la mémoire vidéo
  42. glBufferData(GL_ARRAY_BUFFER, m_tailleVerticesBytes + m_tailleCoordTextureBytes, 0, GL_STATIC_DRAW);
  43. // Transfert des données
  44. glBufferSubData(GL_ARRAY_BUFFER, 0, m_tailleVerticesBytes, m_vertices);
  45. glBufferSubData(GL_ARRAY_BUFFER, m_tailleVerticesBytes, m_tailleCoordTextureBytes, m_coordTexture);
  46. // Déverrouillage de l'objet
  47. glBindBuffer(GL_ARRAY_BUFFER, 0);
  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 pmv, Shader const &shad)
  69. {
  70. // Verrouillage du VAO
  71. glBindVertexArray(m_vaoID);
  72. // Envoi des matrices
  73. glUniformMatrix4fv(glGetUniformLocation(shad.getProgramID(), "pmv"), 1, GL_FALSE, glm::value_ptr(pmv));
  74. // Verrouillage de la texture
  75. glBindTexture(GL_TEXTURE_2D, m_texture.getID());
  76. // Rendu
  77. glDrawArrays(GL_TRIANGLES, 0, 36);
  78. // Déverrouillage de la texture
  79. glBindTexture(GL_TEXTURE_2D, 0);
  80. // Déverrouillage du VAO
  81. glBindVertexArray(0);
  82. }