Surface3D.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "Surface3D.h"
  2. Surface3D::Surface3D(float tailleX, float tailleY, std::string const vertexShader, std::string const fragmentShader,
  3. std::string const fichierImage, float multi)
  4. :m_shader(vertexShader, fragmentShader)
  5. {
  6. // Vertices
  7. tailleX /= 2;
  8. tailleY /= 2;
  9. float vertices[] = {-tailleX, 0.0, -tailleY, tailleX, 0.0, -tailleY, tailleX, 0.0, tailleY, // Triangle 1
  10. -tailleX, 0.0, -tailleY, -tailleX, 0.0, tailleY, tailleX, 0.0, tailleY}; // Triangle 2
  11. for (int i(0); i<18; i++)
  12. m_vertices[i] = vertices[i];
  13. // Coordonnées de texture
  14. if (multi == 0.0f)
  15. multi = 1.0;
  16. float multiX, multiY;
  17. multiX = multiY = multi;
  18. if (tailleX < tailleY)
  19. multiX *= tailleX/tailleY;
  20. else if (tailleY < tailleX)
  21. multiY *= tailleY/tailleX;
  22. float coordTexture[] = {0, 0, multiX, 0, multiX, multiY, // Triangle 1
  23. 0, 0, 0, multiY, multiX, multiY}; // Triangle 2
  24. for (int i(0); i<12; i++)
  25. m_coordTexture[i] = coordTexture[i];
  26. // Texture
  27. m_texture.charger(fichierImage);
  28. // Shader
  29. if (!m_shader.charger())
  30. std::cout << "Echec du chargement des shaders de texture." << std::endl;
  31. }
  32. Surface3D::~Surface3D()
  33. {
  34. }
  35. void Surface3D::afficher(glm::mat4 &projection, glm::mat4 &modelview)
  36. {
  37. // Activation du shader
  38. glUseProgram(m_shader.getProgramID());
  39. // Envoi des vertices
  40. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, m_vertices);
  41. glEnableVertexAttribArray(0);
  42. // Envoi des coordonnées de texture
  43. glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, m_coordTexture);
  44. glEnableVertexAttribArray(2);
  45. // Envoi des matrices
  46. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(projection));
  47. glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview));
  48. // Verrouillage de la texture
  49. glBindTexture(GL_TEXTURE_2D, m_texture.getID());
  50. // Rendu
  51. glDrawArrays(GL_TRIANGLES, 0, 6);
  52. // Déverrouillage de la texture
  53. glBindTexture(GL_TEXTURE_2D, 0);
  54. // Désactivation des tableaux
  55. glDisableVertexAttribArray(2);
  56. glDisableVertexAttribArray(0);
  57. // Désactivation du shader
  58. glUseProgram(0);
  59. }