Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: OpenGL3 - problème de texturage  (Lu 785 fois)

0 Membres et 1 Invité sur ce sujet

Jean du bois

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
OpenGL3 - problème de texturage
« le: Mai 08, 2016, 03:05:05 pm »
Bonjour à tous,  ;D
Mon tout premier post sur SFML  :-[
Je suis un tutoriel pour apprendre à manipuler Opengl3 et j'essaie d'aficher une texture sur un triangle.
Malheuresement, je me retrouve avec un triangle blanc sans  aucune raison :o
Je précise qu'aucune erreur ne s'affiche dans la console
Merci d'avance pour votre aide  ;)

#include <iostream>
#include <SFML/Graphics.hpp>
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/type_ptr.hpp>

int main()
{
    sf::ContextSettings contextSettings;
    contextSettings.majorVersion = 3; // Version OpenGL 3.3
    contextSettings.minorVersion = 3;
    sf::Window window(sf::VideoMode(800, 600), "OpenGL 3", sf::Style::Default, contextSettings);

    if(glewInit() != GLEW_OK){ // Message d'erreur si glew n'a pas été chargé
        std::cout << "Erreur initialisation GLEW";
        return EXIT_FAILURE;
    }
    glEnable(GL_TEXTURE_2D); // On active l'utilisation de texture. Si c'est pas déjà activé??

    // Définition des matrices
    glm::mat4 projection = (glm::mat4)glm::perspective(70.0, (double)800/600, 0.01, 100.0);
    glm::mat4 modelview = glm::lookAt(/*position de la camera*/glm::vec3(1),
                    /*point cible*/glm::vec3(0), /*repere vertical: Z*/glm::vec3(0,0,1));

    // Chargement du shader
    sf::Shader shader;
    if(!shader.loadFromFile("Shaders/texture.vert", "Shaders/texture.frag"))
        return EXIT_FAILURE;
    sf::Shader::bind(&shader); // On le selectionne

    // Chargement de la texture
    sf::Texture texture;
    if(!texture.loadFromFile("resources/texture.jpg"))
        return EXIT_FAILURE;
    sf::Texture::bind(&texture); // On la selectionne

    // Définition des vertices du triangle et des sommets de la texture
    float vertices[] = {-0.5,-0.5,0.0,  0.0,0.5,0.0,  0.5,-0.5,0.0};
    float coordTexture[] = {0,0, 1,0, 1,1}; // erreur par ici??

    while(window.isOpen())
    {
        // Gestion evenements
        sf::Event event;
        while(window.pollEvent(event)){
            if(event.type == sf::Event::Closed
            ||(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape))
                window.close(); // On quitte
        }

        // Nettoyage de l'écran
        glClear(GL_COLOR_BUFFER_BIT);

        // On remplie puis on active le tableau Vertex Attrib 0
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);

        // Même chose avec le tableau Vertex Attrib 1
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, coordTexture);
        glEnableVertexAttribArray(1);

        // On envoie les matrices au shader
        glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview));
        glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "projection"), 1, GL_FALSE, glm::value_ptr(projection));

        // On affiche le triangle
        glDrawArrays(GL_TRIANGLES, 0, 3);

        // On désactive les tableaux Vertex Attrib
        glDisableVertexAttribArray(0);
        glDisableVertexAttribArray(1);

        // Actualisation de la fenêtre
        window.display();
    }

    return EXIT_SUCCESS;
}