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;
}