Cabane.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "Cabane.h"
  2. // Permet d'éviter la ré-écriture du namespace glm::
  3. using namespace glm;
  4. // Constructeur et Destructeur
  5. Cabane::Cabane(std::string const vertexShader, std::string const fragmentShader) : m_shader(vertexShader, fragmentShader),
  6. m_textureMur("Textures/Mur.jpg"), m_textureToit("Textures/Toit.jpg")
  7. {
  8. // Chargement du shader
  9. m_shader.charger();
  10. // Chargement des textures
  11. m_textureMur.charger();
  12. m_textureToit.charger();
  13. // Vertices temporaires
  14. float verticesTmp[] = {-5, 0, -5, 5, 0, -5, 5, 5, -5, // Mur du Fond
  15. -5, 0, -5, -5, 5, -5, 5, 5, -5, // Mur du Fond
  16. -5, 0, -5, -5, 0, 5, -5, 5, 5, // Mur Gauche
  17. -5, 0, -5, -5, 5, -5, -5, 5, 5, // Mur Gauche
  18. 5, 0, -5, 5, 0, 5, 5, 5, 5, // Mur Droit
  19. 5, 0, -5, 5, 5, -5, 5, 5, 5, // Mur Droit
  20. -5, 5, -5, 5, 5, -5, 0, 6, -5, // Combles
  21. -6, 4.8, -6, -6, 4.8, 6, 0, 6, 6, // Toit Gauche
  22. -6, 4.8, -6, 0, 6, -6, 0, 6, 6, // Toit Gauche
  23. 6, 4.8, -6, 6, 4.8, 6, 0, 6, 6, // Toit Droit
  24. 6, 4.8, -6, 0, 6, -6, 0, 6, 6}; // Toit Droit
  25. // Coordonnées de texture temporaires
  26. float coordTexture[] = {0, 0, 1, 0, 1, 1, // Mur du Fond
  27. 0, 0, 0, 1, 1, 1, // Mur du Fond
  28. 0, 0, 1, 0, 1, 1, // Mur Gauche
  29. 0, 0, 0, 1, 1, 1, // Mur Gauche
  30. 0, 0, 1, 0, 1, 1, // Mur Droit
  31. 0, 0, 0, 1, 1, 1, // Mur Droit
  32. 0, 0, 1, 0, 0.5, 0.5, // Combles
  33. 0, 0, 1, 0, 1, 1, // Toit Gauche
  34. 0, 0, 0, 1, 1, 1, // Toit Gauche
  35. 0, 0, 1, 0, 1, 1, // Toit Droit
  36. 0, 0, 0, 1, 1, 1}; // Toit Droit
  37. // Copie des vertices
  38. for(int i(0); i < 99; i++)
  39. m_vertices[i] = verticesTmp[i];
  40. // Copie des coordonnées
  41. for(int i(0); i < 66; i++)
  42. m_coordTexture[i] = coordTexture[i];
  43. }
  44. Cabane::~Cabane()
  45. {
  46. }
  47. // Méthodes
  48. void Cabane::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 des coordonnées de texture
  56. glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, m_coordTexture);
  57. glEnableVertexAttribArray(2);
  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. // Verrouillage de la texture du Mur
  62. glBindTexture(GL_TEXTURE_2D, m_textureMur.getID());
  63. // Rendu
  64. glDrawArrays(GL_TRIANGLES, 0, 21);
  65. // Déverrouillage de la texture
  66. glBindTexture(GL_TEXTURE_2D, 0);
  67. // Verrouillage de la texture du Toit
  68. glBindTexture(GL_TEXTURE_2D, m_textureToit.getID());
  69. // Rendu
  70. glDrawArrays(GL_TRIANGLES, 21, 12);
  71. // Déverrouillage de la texture
  72. glBindTexture(GL_TEXTURE_2D, 0);
  73. // Désactivation des tableaux
  74. glDisableVertexAttribArray(2);
  75. glDisableVertexAttribArray(0);
  76. // Désactivation du shader
  77. glUseProgram(0);
  78. }