Cristal.cpp 3.1 KB

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