#include "Surface3D.h" Surface3D::Surface3D(float tailleX, float tailleY, std::string const vertexShader, std::string const fragmentShader, std::string const fichierImage, float multi) :m_shader(vertexShader, fragmentShader) { // Vertices tailleX /= 2; tailleY /= 2; float vertices[] = {-tailleX, 0.0, -tailleY, tailleX, 0.0, -tailleY, tailleX, 0.0, tailleY, // Triangle 1 -tailleX, 0.0, -tailleY, -tailleX, 0.0, tailleY, tailleX, 0.0, tailleY}; // Triangle 2 for (int i(0); i<18; i++) m_vertices[i] = vertices[i]; // Coordonnées de texture if (multi == 0.0f) multi = 1.0; float multiX, multiY; multiX = multiY = multi; if (tailleX < tailleY) multiX *= tailleX/tailleY; else if (tailleY < tailleX) multiY *= tailleY/tailleX; float coordTexture[] = {0, 0, multiX, 0, multiX, multiY, // Triangle 1 0, 0, 0, multiY, multiX, multiY}; // Triangle 2 for (int i(0); i<12; i++) m_coordTexture[i] = coordTexture[i]; // Texture m_texture.charger(fichierImage); // Shader if (!m_shader.charger()) std::cout << "Echec du chargement des shaders de texture." << std::endl; } Surface3D::~Surface3D() { } void Surface3D::afficher(glm::mat4 &projection, glm::mat4 &modelview) { // Activation du shader glUseProgram(m_shader.getProgramID()); // Envoi des vertices glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, m_vertices); glEnableVertexAttribArray(0); // Envoi des coordonnées de texture glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, m_coordTexture); glEnableVertexAttribArray(2); // Envoi des matrices glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(projection)); glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview)); // Verrouillage de la texture glBindTexture(GL_TEXTURE_2D, m_texture.getID()); // Rendu glDrawArrays(GL_TRIANGLES, 0, 6); // Déverrouillage de la texture glBindTexture(GL_TEXTURE_2D, 0); // Désactivation des tableaux glDisableVertexAttribArray(2); glDisableVertexAttribArray(0); // Désactivation du shader glUseProgram(0); }