1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #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);
- }
|