Sol.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "Sol.h"
  2. // Permet d'éviter la ré-écriture du namespace glm::
  3. using namespace glm;
  4. // Constructeur de Destructeur
  5. Sol::Sol(float longueur, float largeur, int repetitionLongueur, int repetitionLargeur, std::string const vertexShader, std::string const fragmentShader, std::string const texture) :
  6. m_shader(vertexShader, fragmentShader), m_texture(texture)
  7. {
  8. // Chargement du shader
  9. m_shader.charger();
  10. // Chargement de la texture
  11. m_texture.charger();
  12. // Division de la taille
  13. longueur /= 2.0;
  14. largeur /= 2.0;
  15. // Vertices temporaires
  16. float verticesTmp[] = {-longueur, 0, -largeur, longueur, 0, -largeur, longueur, 0, largeur, // Triangle 1
  17. -longueur, 0, -largeur, -longueur, 0, largeur, longueur, 0, largeur}; // Triangle 2
  18. // Coordonnées de texture temporaires
  19. float coordTexture[] = {0, 0, repetitionLongueur, 0, repetitionLongueur, repetitionLargeur, // Triangle 1
  20. 0, 0, 0, repetitionLargeur, repetitionLongueur, repetitionLargeur}; // Triangle 2
  21. // Copie des vertices
  22. for(int i(0); i < 18; i++)
  23. m_vertices[i] = verticesTmp[i];
  24. // Copie des coordonnées
  25. for(int i(0); i < 12; i++)
  26. m_coordTexture[i] = coordTexture[i];
  27. }
  28. Sol::~Sol()
  29. {
  30. }
  31. // Méthodes
  32. void Sol::afficher(glm::mat4 &projection, glm::mat4 &modelview)
  33. {
  34. // Activation du shader
  35. glUseProgram(m_shader.getProgramID());
  36. // Envoi des vertices
  37. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, m_vertices);
  38. glEnableVertexAttribArray(0);
  39. // Envoi des coordonnées de texture
  40. glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, m_coordTexture);
  41. glEnableVertexAttribArray(2);
  42. // Envoi des matrices
  43. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_FALSE, value_ptr(projection));
  44. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_FALSE, value_ptr(modelview));
  45. // Verrouillage de la texture
  46. glBindTexture(GL_TEXTURE_2D, m_texture.getID());
  47. // Rendu
  48. glDrawArrays(GL_TRIANGLES, 0, 6);
  49. // Déverrouillage de la texture
  50. glBindTexture(GL_TEXTURE_2D, 0);
  51. // Désactivation des tableaux
  52. glDisableVertexAttribArray(2);
  53. glDisableVertexAttribArray(0);
  54. // Désactivation du shader
  55. glUseProgram(0);
  56. }